我在C中使用sendto()时遇到一个奇怪的问题。我有以下代码:

struct sockaddr_in currSocket;
int currSocketLength = sizeof(currSocket);
memset((char *)&currSocket, 0, sizeof(currSocket));
currSocket.sin_family = AF_INET;
currSocket.sin_port = htons(serverPortNumber);
// add the server IP address
inet_aton(serverIP, &currSocket.sin_addr);

int send_result = sendto(masterSocket, bufferToSend , 1000, 0, (struct sockaddr *) &currSocket, currSocketLength);
if (send_result < 0) {
    perror("Something is wrong");
}
bzero(bufferToSend, 1000);


当我第一次在bufferToSend中发送数据时,这非常有用。但是,如果我想以完全相同的方式再次发送数据(按照上面的代码-创建套接字并将其发送到那里),则不会被接收。为什么会这样,我该如何解决?

编辑:
在仔细研究之后,我意识到这是因为我的IP地址字符串错误,因为它已被覆盖。在上一次阅读之后,似乎值有所变化。

// here the IP address is fine
printf("%s\n", ipAddress);
char bufferFromSocket[512];
int amount_read = read(masterSocket, bufferFromSocket, 512);
// here the IP address is overwritten by whatever is in bufferFromSocket
printf("%s\n", ipAddress);


任何想法为什么会发生这种情况?

最佳答案

我没有为ipAddress分配足够的空间。当它应该是char []时将其作为指针,然后使用strcpy复制到它。

10-08 02:02