gpt4 book ai didi

c - recvfrom 函数中的文件描述符错误

转载 作者:行者123 更新时间:2023-12-04 12:19:56 25 4
gpt4 key购买 nike

这是我的 udp 服务器端代码

#include"headers.h"
int main(int argc,char **argv)
{
//------------udp server socket connection------//

int sd1;
struct sockaddr_in serveraddr, clientaddr;
char buffer[100];
char *bufptr = buffer;
int cnt=1,ret;
socklen_t clen;
clen=sizeof(clientaddr);

//int buflen = sizeof(buffer);

sd1=socket(AF_INET,SOCK_DGRAM,0);

printf("udp socket id=%d\n",sd1);

printf("socket created for udp..\n");

if(sd1<0)
{
perror("udp_sfd");
exit(0);
}

printf("server socket created..\n");

serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
serveraddr.sin_addr.s_addr=INADDR_ANY;

if(bind(sd1,(struct sockaddr *)&serveraddr,sizeof(serveraddr))<0)
{
perror("bind\n");
exit(0);
}
else
{

while(1)
{
printf("server accept from client\n");

ret=recvfrom(sd1,(char *)bufptr,strlen(buffer),0,(struct sockaddr *)&clientaddr,&clen);
printf("ret=%d\n",ret);

//printf("hello\n");
if(ret<0)
{
perror("recvfrom");
exit(0);
}
else
{
printf("UDP Server received the following:\n \"%s\" message\n", bufptr);
}
//close(sd1);
}
}

close(sd1);
return 0;
}

我正在从客户端发送 tht 缓冲区......而在服务器端它给了我这样的错误......

错误的文件描述符.... 我该怎么办...

我还更改了文件描述符的名称 2 次...仍然无法正常工作...

最佳答案

你的 recvfrom 不好。您应该使用 sizeof(buffer) 而不是 strlen(buffer)。由于缓冲区在堆栈上,您可能在那里有一个大字符串,然后如果 recvfrom 获得大量数据,您就会溢出缓冲区。

如果这没有帮助,我会再研究一下。

关于c - recvfrom 函数中的文件描述符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40173063/

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