udp接收的问题

gohappy_1999 2005-12-06 10:25:48
如果UDP服务器调用RecvFrom(s, buff, 100, ...)接收客户端数据,而这是多个客户端同时向服务器发送50个字节的数据包,问服务器调用一次RecvFrom()会不会收到数据包长度等于100的情况,而这个数据包中的数据分别来源于不同的客户端?
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vicky_jam 2005-12-07
  • 打赏
  • 举报
回复
汗~
理解错了,我以为你说的一个客户端是指一个IP 汗~
唉~ 被人鄙视了,郁闷~
gohappy_1999 2005-12-06
  • 打赏
  • 举报
回复
天使亲蛙:
假如可以的话,那怎么去判断这个包是由哪些客户端发送包的组合,按你的方法应该是
没法判断的。
hjun:
谢谢
hjunxu 2005-12-06
  • 打赏
  • 举报
回复
recvfrom可以收tcp包和udp包,
如果是tcp包,不同的客户端发有不同的socket,当然不会有不同客户端数据在一起的情况,只可能是同一个客户端,分批发送的数据一起受到。

如果是udp,不论如何一个报文就是一个报文。
hjunxu 2005-12-06
  • 打赏
  • 举报
回复
udp是基于报文的,发50,就只收50。
vicky_jam 2005-12-06
  • 打赏
  • 举报
回复
首先:当然可能
"服务器调用一次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);
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧