一个UDP奇怪的问题,高手来答

minger909 2007-04-05 11:30:59
MFC 继承一个CSocket 类的 CMySocket
客户端:
创建一个无端口要求的套接字 IP:127.0.0.1
mySocket = new CMySocket;
mySocket->Create(0,SOCK_DGRAM);
CString str="hello";
mySocket->SendTo(str,str.GetLength(),8888,"127.0.0.1",0);
服务器:
端口:8888 IP:127.0.0.1
重载 OnReceive()
{
char buff[10];
memset(buff, 0, sizeof(buff));

sockaddr_in client;
int nlen = sizeof(SOCKADDR);
ReceiveFrom(buff,sizeof(buff),(LPSOCKADDR)&client,&nlen,0);
CString str_IP =inet_ntoa(client.sin_addr);
int port=client.sin_port;
CString str_Port;
str_Port.Format("%d",port);
AfxMessageBox(str_Port);
UINT Port = client.sin_port ;
SendTo(buff,sizeof(buff),Port,str_IP,0); //
}
问题来了:
在OnReceive 中直接使用接收到的 UDP 信息 client 发送一个回递信息给 UDP(刚接收的),客户端接收不到信息,且服务器又进行一次OnReceive 调用,再用此时接收到的client 发送一个信息,客户端可以接收到信息。
经过上述论述,你可能学得是第二次信息才接收到客户端的 数据,问题 在于:真正接收到的数据,在本问题中即:str="hello",是在第一次接收中得到的,而用第二次得到的client 信息才能发送回递信息,即对应的 IP信息是在第二次接收数据中得到的

我很困惑 ,高手来帮我解答一下。
...全文
257 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
minger909 2007-04-07
  • 打赏
  • 举报
回复
真他妈的没人来 还是没高手 我自己来答吧
网络字节顺序和计算机字节顺序不同导致的 。
UINT Port = htons(client.sin_port);
这个端口就对了!!!
minger909 2007-04-06
  • 打赏
  • 举报
回复
高手来答啊!!!!UP
minger909 2007-04-05
  • 打赏
  • 举报
回复
不给分 死活没人来答 @!!!!
真现实!!!

18,356

社区成员

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

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