为什么只能接收一次数据呢?

squall220 2003-02-25 05:18:09
我用recvfrom在客户端接收数据,第一次能接收数据,为什么第二次按接收操作时,调试发现就在recvfrom这里停止一直不动,直到无法响应。
void testDlg::OnRecvData()
{
WSADATA WSAdata;
WORD wVersionRequested;
BOOL optval=TRUE;
char Tmpsz[50];

wVersionRequested = MAKEWORD(2,2);
if(WSAStartup(wVersionRequested,&WSAdata))
{
MessageBox("can't be initilized",NULL,MB_OK);
return false;
}

//create datagram socket
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd == INVALID_SOCKET)
{
sprintf(Tmpsz,"create socket failed!Error NO. is %d",WSAGetLastError());
MessageBox(Tmpsz,NULL,MB_OK);
return false;
}

setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char FAR *)&optval,sizeof(optval));
// Resolve hostname
struct sockaddr_in server;

server.sin_family=AF_INET;
server.sin_addr.S_un.S_addr=INADDR_ANY;
server.sin_port=htons((unsigned short)port);//控件传的端口
//绑定本机套接字
if(bind(sockfd,(LPSOCKADDR)&server,sizeof(server))==SOCKET_ERROR)
{
sprintf(Tmpsz,"host binding error!Error No. is %d",WSAGetLastError());
MessageBox(Tmpsz,NULL,MB_OK);
return false;
}
//
char buf[1024];

int length;
SOCKADDR_IN from;
int fromlen = sizeof(SOCKADDR);
bool recvflag=true;
while(recvflag)
{
length = recvfrom(sockfd,buf,1024,0,(struct sockaddr FAR *)&from,
(int FAR *)&fromlen);
if(length == SOCKET_ERROR)
{
if(WSAGetLastError() != WSAEWOULDBLOCK)
{
sprintf(Tmpsz,"receive data failure! NO. is %d",WSAGetLastError());
closesocket(sockfd);
}
}
if(length<=0){
AfxMessageBox("no data to receive");
recvflag =false;
}
}
closesocket(sockfd);
}
...全文
46 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,359

社区成员

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

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