UDP服务器给分段错误

我用UDP写了下面的echo服务器,但是我不知道为什么在sendto函数中给我分段错误,它收到很好,但是发送数据返回给客户端有问题。 我一直试图find几个小时的问题,但没有得到任何地方。 请有人指出错误,或者我可能做错了什么。 谢谢

#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #define true 1 #define false 0 int main(int argc,char **args){ int BUF_LENGTH=101; int port_no=1800; struct sockaddr_in serv_addr,rmt_addr; //rmt_addr=malloc(sizeof(struct sockaddr_in)); char *buffer=malloc(BUF_LENGTH); int byte_recv=0; int rmt_length=0; int sock_id; sock_id=socket(AF_INET,SOCK_DGRAM,0); if(sock_id<0){ printf("Error creating socket : %d",sock_id); return -1; } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(port_no); serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); bind(sock_id,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); printf("Created\n"); while(true){ printf("Waiting\n"); byte_recv=recvfrom(sock_id,buffer,BUF_LENGTH,0,(struct sockaddr*)&rmt_addr,&rmt_length); printf("%s\n",buffer); if(byte_recv<0){ printf("Error receiving: %d",byte_recv); error("recvfrom"); return -2; } printf("%d:%d %s\n",rmt_length,rmt_addr.sin_port,inet_ntoa(rmt_addr.sin_addr)); byte_recv=sendto(sock_id,buffer,BUF_LENGTH,0,(struct sockaddr*)&rmt_addr,rmt_length); //The segmentation fault comes here printf("Bytes sent: %d \n",byte_recv); if(byte_recv<0) error("sendto"); } free(buffer); return 0; } 

这些行:

 error("recvfrom"); error("sendto"); 

不要做你认为他们做的事。 你可能打算perror

此外,您不正确初始化rmt_length 。 尝试这个:

 int rmt_length=sizeof(rmt_addr); 

最后,你回应比服务器收到更多的字节。 尝试这个:

 byte_recv=sendto(sock_id,buffer,byte_recv,0,(struct sockaddr*)&rmt_addr,rmt_length);