简单的 UDP 服务器回复不起作用
Simple UDP server reply not working
现在我只是想让我的 "server" 在收到 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);
}
}
}
}
sendto
调用中的 sizeof(incoming)
只是指针的大小,您需要传递从 recvfrom
调用中获得的结构的大小。 malloc
也导致内存泄漏,因为你从来没有 free
内存。
我建议将结构声明为
struct sockaddr_in incoming = {0};
然后将结构的地址传递给recvfrom
和sendto
,例如
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
它,你需要free
它。但是你可以声明它,然后传递地址。
现在我只是想让我的 "server" 在收到 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);
}
}
}
}
sendto
调用中的 sizeof(incoming)
只是指针的大小,您需要传递从 recvfrom
调用中获得的结构的大小。 malloc
也导致内存泄漏,因为你从来没有 free
内存。
我建议将结构声明为
struct sockaddr_in incoming = {0};
然后将结构的地址传递给recvfrom
和sendto
,例如
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
它,你需要free
它。但是你可以声明它,然后传递地址。