2011-07-22 47 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