读取数据后,程序停在这里,请诸位大侠帮忙解决(在线等待)

stevphen 2002-07-24 10:28:11
#include "stdafx.h"
#include "winsock.h"
#pragma comment(lib, "wsock32")
#include <string.h>

#ifdef WIN32
bool wasInited = false;
void WSAInit()
{
if (wasInited) return;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
wasInited = true;
}
#else

void WSAInit(){}

#endif

int main()
{
WSAInit();
char *buf = new char[256];
struct hostent *hp;

struct sockaddr_in sa;
int s, i,n = sizeof(struct sockaddr), on = 1, len = strlen(buf);
if ( (s = socket(AF_INET,SOCK_DGRAM,0)) < 0 ) return(1);
if ( setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&on, sizeof(on)) != 0)
return(1);
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = htonl(INADDR_BROADCAST);
sa.sin_port = htons(8000);

sendto(s, buf, len, 0, (const struct sockaddr *)&sa, n);

while(1)
{
if ((i = recvfrom(s, buf, 256, 0, (struct sockaddr *)&sa, &n)) == -1)
break;
//读取数据后,程序停在这里,请诸位大侠帮忙解决?
buf[i] = (char)0;
hp = gethostbyaddr((const char *)&sa.sin_addr, 4, AF_INET);
printf("%s:%s\n",hp->h_name ,buf);
}

return 0;
}
...全文
23 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alanwang_ 2002-07-24
  • 打赏
  • 举报
回复
阻塞方式recvfrom没有收到数据包就会阻塞
gdxflm 2002-07-24
  • 打赏
  • 举报
回复
1 使用异步io,用select
2 使用非阻塞模式socket
3 将阻塞模式的socket操作放到另外的线程中

建议看"windows网络编程"
gdxflm 2002-07-24
  • 打赏
  • 举报
回复
1 使用异步io,用select
2 使用非阻塞模式socket
3 将阻塞模式的socket操作放到另外的线程中

建议看"windows网络编程"
hohoo 2002-07-24
  • 打赏
  • 举报
回复
同意alanwang_(alan)

接收数据时应该另绑定一个socket在8000端口上,这样你才能接收到数据。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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