大家分析一下我得SOCKET堵塞问题?

yuhang111 2004-04-30 10:03:20
下面是我用来接收的一段程序,
void CGr47sockDlg::Onstart()
{
// TODO: Add your control notification handler code here


// AfxBeginThread(runthread, (LPVOID)this);

sockaddr_in from,sin;
int port=6000,fromport=0;
char smsg[256]; int fromlength=sizeof(SOCKADDR);


from.sin_family=AF_INET;
from.sin_addr.s_addr=inet_addr("192.168.2.11");
from.sin_port=htons(port);
int sin_len=sizeof(from);

sin.sin_family=AF_INET;
sin.sin_addr.s_addr=htonl(INADDR_ANY);
sin.sin_port=htons(fromport);
int sin_lenfr=sizeof(sin);

int socket_descriptor=socket(AF_INET,SOCK_DGRAM,0);
bind(socket_descriptor,(struct sockaddr*)&from,sizeof(from));

while(1)
{
ZeroMemory(smsg,256);
Sleep(100);
//从广播地址发送消息
int ret =recvfrom(socket_descriptor,smsg,256,0,(struct sockaddr FAR *)&sin,&fromlength);
Sleep(200);
TRACE( "%s\n", smsg);
m_rec=smsg;
UpdateData(FALSE);
m_ctlrec.AddString((smsg));
TRACE("smsg=%s\n",smsg);
TRACE("sin_addr%s\n",inet_ntoa(sin.sin_addr));
TRACE("sin_port%i\n",ntohs(sin.sin_port));


}
当我调试程序时,使用其他UDP调试软件向该程序发送数据,在调试时能看到接收到的数据(在调试窗口中),但在执行的对话框中无法显示,是不是程序处于堵塞引起的,程序没接受到数据时会在recfrom处等待;
如果使用非堵塞方式,应该怎样实现啊!
...全文
52 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifeship 2004-04-30
  • 打赏
  • 举报
回复
同上
samyoung 2004-04-30
  • 打赏
  • 举报
回复
创建一个线程,在线程里面做这个接收数据。
rd73 2004-04-30
  • 打赏
  • 举报
回复
你的程序在不停的收数据,Windows如何发消息给你的窗口啊?你可以在一个线程里实现,然后再通知窗口去更改新就可以了,还有一定在加上Sleep(1)在你的while()里,要不然CPU就会点用到100%了

18,356

社区成员

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

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