如果UDP服务器调用RecvFrom(s, buff, 100, ...)接收客户端数据,而这是多个客户端同时向服务器发送50个字节的数据包,问服务器调用一次RecvFrom()会不会收到数据包长度等于100的情况,而这个数据包中的数据分别来源于不同的客户端?

解决方案 »

  1.   

    首先:当然可能
    "服务器调用一次RecvFrom()会不会收到数据包长度等于100的情况,而这个数据包中的数据分别来源于不同的客户端"
    但是: 你可以区分是那个客户端发给你的,所以还有什么问题么~?char Buff[256]; 
    SOCKADDR_IN Client_sa; 
    DWORD nAddrSize = sizeof(SOCKADDR_IN); 
    int nRecvCount = 0; 
    nRecvCount = recvfrom(hSocket,Buff,256,0,(sockaddr *)(&Client_sa),&nAddrSize); if(nRecvCount == SOCKET_ERROR) 
        printf("recvfrom() error code is:%d.\n",WSAGetLastError()); 
    else 

        printf("%s client send is:\n",inet_ntoa(Client_sa.sin_addr)); 
        printf("%s\n",Buff); 

      

  2.   

    udp是基于报文的,发50,就只收50。
      

  3.   

    recvfrom可以收tcp包和udp包,
    如果是tcp包,不同的客户端发有不同的socket,当然不会有不同客户端数据在一起的情况,只可能是同一个客户端,分批发送的数据一起受到。如果是udp,不论如何一个报文就是一个报文。
      

  4.   

    天使亲蛙:
    假如可以的话,那怎么去判断这个包是由哪些客户端发送包的组合,按你的方法应该是
    没法判断的。
    hjun:
    谢谢