UDP通信的小程序的一个问题

morebread 2010-03-23 06:47:21
我做了一个UDP通信的小程序,因为刚接触,所以就照抄了网上的源代码:
UDP服务器端源程序
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#define BUF_SIZE 1024
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 5678
*****************************************************
int main(int argc, char** argv)
{
*******************************************
我是在vc里建了一个工程的,所以上面的就没写,用一个“开始”按钮控件运行下面的代码
WSADATA wsaData;
SOCKET socketC;
SOCKADDR_IN serverAddr;
char recvbuf[BUF_SIZE];

WSAStartup(MAKEWORD(1,1), &wsaData);

socketC = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(SERVER_PORT);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);

bind(socketC, (SOCKADDR*)&serverAddr, sizeof(serverAddr));

int nRet = recvfrom(socketC, recvbuf, sizeof(recvbuf), 0, 0, 0);
while (1)
{

nRet = recvfrom(socketC,recvbuff,sizeof(recvbuff),0,0,0);
if (nRet != 0)
MessageBox(recvbuff);


closesocket(socketC);

WSACleanup();

return 0:
}


我弄好服务端和客户端后,点服务端上的“开始”按钮后,能接受到客户端发来的消息,消息是一条条发的,但2秒过后程序就没有响应了,只能强制关闭,这是为什么??


...全文
146 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwgddx 2010-03-24
  • 打赏
  • 举报
回复
UpdateData();更新数据到界面.
bragi523 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 morebread 的回复:]
引用 4 楼 zxdyu2009 的回复:
你是阻塞模式的Socket,当没有数据发送的时候,应用程序阻塞在此:
nRet = recvfrom(socketC,recvbuff,sizeof(recvbuff),0,0,0);
你可以通过调试运行的方式看,当没有数据接收的时候会停在recvfrom,你的主线程阻塞在此了,界面当然不能动了。
做法就是把这些代码放在另外一个线程里做,不要放在……
[/Quote]自己刷新下
morebread 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zxdyu2009 的回复:]
你是阻塞模式的Socket,当没有数据发送的时候,应用程序阻塞在此:
nRet = recvfrom(socketC,recvbuff,sizeof(recvbuff),0,0,0);
你可以通过调试运行的方式看,当没有数据接收的时候会停在recvfrom,你的主线程阻塞在此了,界面当然不能动了。
做法就是把这些代码放在另外一个线程里做,不要放在主线程里,就不会影响主线程的界面 了。
[/Quote]

谢谢,的确是这个问题。
但又出现了一个新的问题。我创建了一个线程来实现侦听,然后在“开始”按钮事件中用文本框将得到的数据显示,可为什么要点2下按钮才能显示数据呢?点一下没反应
zxdyu2009 2010-03-23
  • 打赏
  • 举报
回复
你是阻塞模式的Socket,当没有数据发送的时候,应用程序阻塞在此:
nRet = recvfrom(socketC,recvbuff,sizeof(recvbuff),0,0,0);
你可以通过调试运行的方式看,当没有数据接收的时候会停在recvfrom,你的主线程阻塞在此了,界面当然不能动了。
做法就是把这些代码放在另外一个线程里做,不要放在主线程里,就不会影响主线程的界面 了。
踏实每一步 2010-03-23
  • 打赏
  • 举报
回复
因为它有一个while(1)
mayudong1 2010-03-23
  • 打赏
  • 举报
回复
因为它有一个while(1)
tanwei1002 2010-03-23
  • 打赏
  • 举报
回复
结帖率:0.00%


回答也是白回答

18,356

社区成员

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

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