【问题标题】:Udp server sending only 0 bytes of dataudp服务器只发送0字节数据
【发布时间】:2010-05-30 15:22:51
【问题描述】:

这是一个简单的 Udp 服务器。我正在尝试向某些客户端传输数据,但不幸的是它无法传输数据。虽然 send 运行非常成功,但它返回的返回值意味着它没有发送任何内容。On他们正在接收的客户端,但显然是零字节。

   void* UdpServerStreamToClients(void *fileToServe)
   {

    int sockfd,n=0,k;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char dataToSend[1000];

sockfd=socket(AF_INET,SOCK_DGRAM,0);

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(32000);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));


FILE *fp;
if((fp=fopen((char*)fileToServe,"r"))==NULL)
    {
        printf("can not open file ");
        perror("fopen");
        exit(1);
    }


int dataRead=1;
while(dataRead)
{

    len = sizeof(cliaddr);
    if((dataRead=fread(dataToSend,1,500,fp))<0)
    {
        perror("fread");
        exit(1);
    }

    //sleep(2);




    for(list<clientInfo>::iterator it=clients.begin();it!=clients.end();it++)
    {
        cliaddr.sin_family = AF_INET;
        inet_aton(inet_ntoa(it->addr.sin_addr),&cliaddr.sin_addr);
        cliaddr.sin_port = htons(it->udp_port);
        n=sendto(sockfd,dataToSend,sizeof(dataToSend),0,(struct sockaddr *)&cliaddr,len);
        cout<<"number of bytes send by udp: "<< n << endl;  
            printf("SEND this message %d : %s to %s :%d \n",n,dataToSend,inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
    }           



}

}

我正在检查 sizeof(dataTosend) 的值,它与预期的差不多,即千,即缓冲区的大小。 你们是否看到了其中一些可能的缺陷。 在这方面的所有帮助将不胜感激。 谢谢!

【问题讨论】:

  • 您应该发送 dataRead 字节,而不是 sizeof(dataToSend),但它应该仍然可以工作(您会得到一些垃圾,但这不是套接字问题)。您是否已验证 cliaddr 是您所期望的?

标签: c++ sockets udp


【解决方案1】:

不确定这是不是准确的答案,但您在使用之前忘记了memset()(或bzero()cliaddr 结构。

还有一行:

inet_aton(inet_ntoa(it->addr.sin_addr),&cliaddr.sin_addr);

大概可以写成:

cliaddr.sin_addr = it->addr.sin_addr;

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多