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

yuhang111 samsung 开发组长/高级工程师/技术专家  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处等待;
如果使用非堵塞方式,应该怎样实现啊!
...全文
32 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lifeship 2004-04-30
同上
  • 打赏
  • 举报
回复
samyoung 2004-04-30
创建一个线程,在线程里面做这个接收数据。
  • 打赏
  • 举报
回复
rd73 2004-04-30
你的程序在不停的收数据,Windows如何发消息给你的窗口啊?你可以在一个线程里实现,然后再通知窗口去更改新就可以了,还有一定在加上Sleep(1)在你的while()里,要不然CPU就会点用到100%了
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程
加入

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2004-04-30 10:03
社区公告
暂无公告