gpt4 book ai didi

C Sendto 重复执行时不起作用

转载 作者:行者123 更新时间:2023-11-30 19:50:38 27 4
gpt4 key购买 nike

在 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 复制到它。

关于C Sendto 重复执行时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58828684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com