目标地址反转

时间:2012-12-26 14:48:33

标签: c++

我用Python编写代码。现在我正在尝试C ++。当我运行程序时,我看到目标地址(w / Wireshark)反向,即使我使用htonl。在Python中,这个程序运行良好。 遵循代码。在底部我打印了结果。 我正在使用Ubuntu 12.04LTS和g ++(Ubuntu / Linaro 4.6.3)。

//UdpClient.cpp
#include <iostream>
#include <string>
#include <sstream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
#include <cstdlib>
#include <arpa/inet.h>
#include <typeinfo>
using namespace std;

int main(int argc, char* argv[])
{
    int s, p, rb,rs;
    int bytesend;
    char buf[1024];
    int len;
    char ent[16];
    char Porta[5];
    unsigned long EndServ;
    struct sockaddr_in UdpServer, UdpClient;
    int UdpServerLen = sizeof(UdpServer);
    //do text
    string msg("The quick brown fox jumps over the lazy dog\n");
    len = msg.copy(buf, msg.size(), 0);

    buf[len] = '\0';
    //do socket
    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s == -1){
        cout << "No socket done\n";
    }
    else {
        cout << "Socket done\n";
    }
    //populate UdpClient struct
    UdpClient.sin_family = AF_INET;
    UdpClient.sin_addr.s_addr = INADDR_ANY;
    UdpClient.sin_port = 0;
    //populate UdpServer struct
    UdpServer.sin_family = AF_INET;
    UdpServer.sin_addr.s_addr = inet_addr(argv[1]);
    //check if addres is correct
    cout << "ServerAddress: " << hex << UdpServer.sin_addr.s_addr << endl;
    UdpServer.sin_port = htons(atoi(argv[2]));
    //bind socket
    rb = bind(s, (struct sockaddr *)&UdpClient, sizeof(UdpClient));
    if (rb == 0){
        cout << "Bind OK!\n";
    }
    else {
        cout << "Bind NOK!!!\n";
        close(s);
        exit(1);
    }
    //send text to Server
    cout << "UdpServSiz: " << sizeof(UdpServer) << endl;
    rs = sendto(s, buf, 1024, 0, (struct sockaddr *)&UdpServer, sizeof(UdpServer));
    if (rs == -1){
        cout << "Message NOT sent!!!\n";
    }
    else {
        cout << "Message SENT!!!\n";
    }
    close(s);
    return 0;
}
/*
  edison@edison-AO532h:~/CmmPGMs$ ./UdpClient 127.0.0.1 6789
  Socket done
  ServerAddress: 100007f (using htonl or not!!)
  Bind OK!
  Message SENT!!!
  edison@edison-AO532h:~/CmmPGMs$ 
*/

1 个答案:

答案 0 :(得分:1)

听起来像你在ARM(Linaro)?在这种情况下,处理器的字节顺序与网络顺序匹配,因此htonl和ntohl基本上什么都不做。

相关问题