求助UDP怎么判断对方是否有数据发送过来?

Crystalsisenjie 2004-11-22 12:10:48
小弟刚开始学WINSOCK,想尝试编写一个最简单的UDP点对点的聊天工具。使用MFC的基本对话框。
因为想随时接受显示对方发来的话。

所以我在::OnInitDialog()中完成接受SOCKET的设置和绑定,然后设置一个1秒记数器。
然后在::OnTimer()中加入
if ((Ret = recvfrom(ReceivingSocket, recbuff, 256, 0,
(SOCKADDR *)&SenderAddr, &SenderAddrSize)) == SOCKET_ERROR)
{
AfxMessageBox("ERROR: recvfrom failed with error");
closesocket(ReceivingSocket);
WSACleanup();
return;
}
CClientDC dc(this);
SetBkColor(dc.m_hDC,RGB(220,220,220));
TextOut(dc.m_hDC,140,330,recbuff,256);



这样一运行就程序停止响应,感觉如果能得到判断对方是否有数据发送过来的BOOL量来控制上面程序的执行就不会出现停止响应的程序。也就是说想只有当对方有数据发送过来时候上面的语句才执行。

不知道我这种想法是不是可行。如果可行请告诉我怎么判断。如果不行请告诉我应该怎么解决。
我说的有点乱,对不起了。请大家帮帮忙!
...全文
736 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingzai 2004-11-22
  • 打赏
  • 举报
回复
use CAsyncSocket,example:
http://www.vckbase.com/document/viewdoc/?id=440
fallhunter 2004-11-22
  • 打赏
  • 举报
回复

停止响应是因为recvfrom没有返回,
它在收到消息时才会返回。

你要用异步套接字,如楼上
zlj617 2004-11-22
  • 打赏
  • 举报
回复
如果有端口有消息,那么会自动调用这个函数。
zlj617 2004-11-22
  • 打赏
  • 举报
回复
不用OnTimer(),直接用void OnReceive(int nErrorCode);函数就可以,但是你必须从CAsyncSocket类派生一个class,并用void OnReceive(int nErrorCode)做成员函数就行,还有在创建dialog的时候,应该在创建的第二步,把windows socket选中,否则要手工添加lib.
kingzai 2004-11-22
  • 打赏
  • 举报
回复
可以打开
Crystalsisenjie 2004-11-22
  • 打赏
  • 举报
回复
我按2楼的方法做了。把接受SOCKET的初始化和绑定还有接受都放到OnReceive()中
并且
CClientDC dc(this);
SetBkColor(dc.m_hDC,RGB(220,220,220));
TextOut(dc.m_hDC,140,330,recbuff,256);

无法执行,因为不是从CWnd类派生出来的,所以
换成了AfxMessageBox(recbuff);
来显示对方发来的话。

这样没有停止响应的现象,但是对方发送语句过来他那边显示了发送成功,但是我这却一点反应也没。

还有
kingzai你给的那个示例连接打不开啊。
oyljerry 2004-11-22
  • 打赏
  • 举报
回复
用OnReceive接收消息

18,356

社区成员

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

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