gpt4 book ai didi

c - 简单的 UDP 服务器回复不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:57 25 4
gpt4 key购买 nike

现在我只是想让我的“服务器”在收到 UDP 数据报后立即回复(为更复杂的事情做准备)。

但是,我一直在 sendTo 上收到无效参数错误(在运行时)。谁能帮忙指出为什么?我已经编写了其他 sendTo 并查看了 Internet 上的示例代码,但无法查明原因。

recvfrom 工作正常。

谢谢!

void *receive(void *socket)
{
int* socket_ptr = (int *) socket;
int socket_desc = *socket_ptr;

int recv_length;

socklen_t addrlen = sizeof (struct sockaddr_in);
while(1){

struct Message msg;
struct sockaddr_in * incoming = malloc (sizeof (struct sockaddr_in));

if ((recv_length = recvfrom (socket_desc, &msg, sizeof(msg), 0,
(struct sockaddr *) incoming, &addrlen))
== -1)
{
}else
{

struct CoordMessage * cm = malloc(sizeof (struct CoordMessage));
cm->msgID = BEGINSUCCESS;
cm->tid = msg.tid;

if (sendto(socket_desc, cm, sizeof(struct CoordMessage), 0, (struct sockaddr *) incoming, sizeof(incoming)) < 0){
perror("TEMP Send failed ");
exit(1);
}
}
}
}

最佳答案

sizeof(incoming)sendto 调用中只是一个指针的大小,你需要传递你从 recvfrom 中得到的结构体的大小 调用。此外,malloc 会导致内存泄漏,因为您从未释放 内存。

我建议将结构声明为

struct sockaddr_in incoming = {0};

然后将结构的地址传递给recvfromsendto,例如

if ((recv_length = recvfrom (socket_desc, &msg, sizeof(msg), 0,
(struct sockaddr *) &incoming, &addrlen))
== -1)

if (sendto(socket_desc, cm, sizeof(struct CoordMessage), 0, (struct sockaddr *) &incoming, addrlen) < 0)

同样的事情也适用于cm变量,如果你malloc它,你需要释放它。但您可以只声明它并传递地址。

关于c - 简单的 UDP 服务器回复不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29203184/

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