sendto()在服务器中返回-1

时间:2015-04-26 14:10:00

标签: sockets unix network-programming

int main()
{
   int servsocket,clientsocket;
   struct sockaddr_in server,client;
   FILE *file;
   char filename[100];
   char buf[1024];

    servsocket=socket(AF_INET,SOCK_DGRAM,0);

    server.sin_addr.s_addr=htonl(INADDR_ANY);
    server.sin_port=htons(6003);
    server.sin_family=AF_INET;

    bind(servsocket,(struct sockaddr *) &server,sizeof(server) );

    while(1){   
        int clientsize=0;
        printf("Waiting for file requests \n");
       recvfrom(servsocket,filename,sizeof(filename),0,(struct          sockaddr *)&client,&clientsize);

     file=fopen(filename,"r");
     int size=0;

 do
 {
      size=fread(buf,1,sizeof(buf),file);
      printf("%d bytes read \n",size);
     int sentbytes=  sendto(servsocket,(const char *)buf,size,0,       (struct sockaddr *) &client,sizeof(client));
    printf("%d bytes sent ",sentbytes);         
    }while(size==sizeof(buf));  

   }                

}

我正在尝试使用UDP制作一个简单的文件传输程序。问题是sendto()总是返回-1。这是服务器的代码。

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。您所看到的是您没有正确填写变量clientclientsize系统调用将recvfrom参数用于输入和输出,因此您需要将其初始化为client结构的大小:

int clientsize = sizeof(struct sockaddr_in);

另一个问题是你不是0终止filename字符串:

n = recvfrom(...);
filename[n] = '\0';

最后,您没有测试错误(bindrecvfromsendto等。我保证,这会让你陷入困境。