2011-07-22 35 views
3

林通過套接字這樣發送網絡數據:(廣播)發送/接收怪異數據

void sendBroad(char *dstIP, char *localIP, char *localMAC) 
{ 
    int sock;       /* Socket */ 
    struct sockaddr_in broadcastAddr; /* Broadcast address */ 
    int broadcastPermission;   /* Socket opt to set permission to broadcast */ 
    unsigned int dataLen; 
    char data[100]={0}; 

    strcat(data, localIP); 
    strcat(data, " "); 
    strcat(data, localMAC); 
    strcat(data, " "); 


    /* Create socket for sending/receiving datagrams */ 
    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) 
     perror("socket() failed"); 

    /* Set socket to allow broadcast */ 
    broadcastPermission = 1; 
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission, 
      sizeof(broadcastPermission)) < 0) 
     perror("setsockopt() failed"); 

    /* Construct local address structure */ 
    memset(&broadcastAddr, 0, sizeof(broadcastAddr)); /* Zero out structure */ 
    broadcastAddr.sin_family = AF_INET;     /* Internet address family */ 
    broadcastAddr.sin_addr.s_addr = inet_addr(dstIP); /* Broadcast IP address */ 
    broadcastAddr.sin_port = htons(BroadcastPort);  /* Broadcast port */ 


    dataLen = strlen(data); 
    int j; 
    for (j=0; j<1; j++) /* 3krat a dost */ 
    { 
     /* Broadcast localIP in datagram to clients */ 
     if (sendto(sock, data, dataLen, 0, (struct sockaddr *) 
       &broadcastAddr, sizeof(broadcastAddr)) != dataLen) 
      perror("sendto() sent a different number of bytes than expected"); 
    } 
    /* NOT REACHED */ 
} 

但在接收時,好像我總是得到一些奇怪的字符在開始時:

X.?192.168..... 

當我嘗試發送這些數據6次時,只要我從192 ...開始獲取數據,其他5個字符串就會從這些奇怪的字符開始。有什麼想法發生在這裏?

感謝

+2

downvote,這有多酷...... – shaggy

+2

我認爲這是因爲你已經將你的問題標記爲與網絡有關,但實際上它沒有任何關係 - 你的**問題**與字符串操縱和聯網只是操縱字符串的最終目標。 –

+4

他不知道問題是什麼,因此問題和標籤。 – Erix

回答

7

char data[100];沒有被初始化。因此,您將連接到某些未定義垃圾的末尾,而不是連接到空字符串的末尾。這顯然是未定義的行爲,因爲它不能保證'\ 0'出現在保留空間的任何地方(不要說這只是簡單的未定義行爲,並且編譯器可能在它檢測到這種情況時實際執行它所希望的事情)。

char data[100] = {0};應該這樣做。

+0

我希望它的作品,但它不,仍然是相同的問題 – shaggy

+0

顯示更多的周邊代碼也許? –

+0

問題用代碼更新 – shaggy