我想开发一个UDP客户端服务器程序。这里是我的代码:UDP套接字 - 服务器没有收到任何数据
服务器
int main(int argc, char *argv[]) {
struct sockaddr_in client, server;
int s, i=0;
socklen_t n;
char buf[4];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=atoi(argv[1]);
inet_pton(AF_INET, "localhost", &(server.sin_addr));
bind(s,(struct sockaddr *)&server,sizeof(server));
n=sizeof(client);
while(1) {
recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&client, &n);
printf("%s", buf);
}
close(s);
return 0;
}
客户
int main (int argc, char *argv[]) {
struct sockaddr_in client, server;
int s, n;
char buf[30];
char temp[4];
s=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=atoi(argv[2]);
inet_pton(AF_INET, argv[1], &(server.sin_addr));
n=sizeof(server);
while(1) {
scanf("%s", buf);
fflush(stdin);
sendto(s, buf, sizeof(buf), 0, (struct sockaddr *) &server, n);
}
close(s);
return 0;
}
在自然界中非常基本的,没有任何的错误处理。服务器输出任何客户端发送。
在我测试某些东西时,我忘记删除/释放动态分配的内存后,它停止在我的Ubuntu机器上工作。它在不同的Linux服务器上工作得很好。
任何想法可能会造成这种情况?未封闭的端口,内存泄漏?我该如何解决?
'fflush(stdin);'调用*未定义的行为*,所以不要使用它。 – MikeCAT
'printf(“%s”,buf);'也可能调用*未定义的行为*如果buf中的内容不是以null结尾的字符串。在打印之前正确终止“字符串”,或以其他方式打印。 – MikeCAT
以前,我的程序被困在无法读取数据,所以我不得不强制清理标准输入缓冲区。任何更好的选择? – ExtremistEnigma