UDP数据传输程序故障排查求助
UDP数据传输程序故障排查求助
我写了一个UDP客户端和服务器程序,逻辑是客户端发送一条标准LS命令给服务器,同时指定命令的执行次数;服务器执行对应次数的命令后,把输出结果以64字节为单位分批传输回客户端,客户端接收后打印内容。但实际运行下来程序并没有按预期工作,我检查了半天也没找到问题所在,麻烦各位帮忙看看!下面是客户端和服务器的代码:
客户端代码
#include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> typedef struct sockaddr_in sock; typedef struct sockaddr sck; int main() { char cmd[10],rcv[65]; int tm,end,ack = 1; printf("Enter any standard LS command: "); scanf("%s",cmd); printf("Enter no.of times to be executed: "); scanf("%d",&tm); int sockfd = socket(AF_INET,SOCK_DGRAM,0); sock addr; int len = sizeof(addr); addr.sin_family = AF_INET; addr.sin_port = htons(5000); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); sendto(sockfd,cmd,sizeof(cmd),0,(sck *)&addr,len); sendto(sockfd,&tm,sizeof(int),0,(sck *)&addr,len); while(end) { int sz = recvfrom(sockfd,rcv,sizeof(rcv),0,(sck *)&addr,&len); printf("%s\n",rcv); if(sz == 64) sendto(sockfd,&ack,sizeof(int),0,(sck *)&addr,len); else { ack = 0; sendto(sockfd,&ack,sizeof(int),0,(sck *)&addr,len); } recvfrom(sockfd,&end,sizeof(int),0,(sck *)&addr,&len); } close(sockfd); }
服务器代码
#include <sys/types.h> #include <sys/wait.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> typedef struct sockaddr_in sock; typedef struct sockaddr sck; int main() { char cmd[10],snd[65],ch; int tm,cn = 0,end = 1, ack; int sockfd = socket(AF_INET,SOCK_DGRAM,0); sock addr; int len = sizeof(addr); addr.sin_family = AF_INET; addr.sin_port = htons(5000); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); bind(sockfd,(sck *)&addr,sizeof(addr)); recvfrom(sockfd,cmd,sizeof(cmd),0,(sck *)&addr,&len); recvfrom(sockfd,&tm,sizeof(int),0,(sck *)&addr,&len); int fd = open("op.txt",O_CREAT | O_WRONLY | O_TRUNC,0644); int bc = dup(1); dup2(fd,1); for(int i = 1;i <= tm;i++) system(cmd); close(fd); dup2(bc,1); fd = open("op.txt",O_RDONLY); while(read(fd,&ch,1)) { if(cn < 64) snd[cn] = ch; else { snd[cn] = '\0'; sendto(sockfd,snd,sizeof(snd),0,(sck *)&addr,len); recvfrom(sockfd,&ack,sizeof(ack),0,(sck *)&addr,&len); if(!ack) { end = 0; sendto(sockfd,&end,sizeof(int),0,(sck *)&addr,len); break; } else sendto(sockfd,&end,sizeof(int),0,(sck *)&addr,&len); cn = 0; } cn++; } close(fd); close(sockfd); }
备注:内容来源于stack exchange,提问作者user23427207
相关产品推荐
相关产品推荐

