服务端为什么会这样呢 ?

daohua 2007-06-13 01:32:14
运行以下程序后服务断自动结束了,我想recvfrom()应该是等待客户锻发来消息再进行响应了,而我的客户端程序没运行,也就是没收到消息服务端就自动结束了,
代码如下:(基于UDP的通信)

#include <stdio.h>
#include <winsock2.h>
void main()
{
WORD ver;
WSADATA wsadata;
int flag;
ver = MAKEWORD(1,1);

flag=WSAStartup(ver,&wsadata);

if(flag !=0)
return ;

if(LOBYTE(wsadata.wVersion) != 1 || HIBYTE(wsadata.wVersion) !=1)
{
WSACleanup();
return ;
}

SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addr.sin_family=AF_INET;
addr.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR *)&addr,sizeof(SOCKADDR));

char srvBuf[100]={0};
SOCKADDR_IN addr2;
int len=sizeof(SOCKADDR);
recvfrom(sockSrv,srvBuf,100,0,(SOCKADDR *)&addr2,&len);//程序运行到这里应该会类似监听啊
printf("收到的是 :%s",srvBuf);

closesocket(sockSrv);
WSACleanup();
}
...全文
239 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Stefine 2007-06-14
  • 打赏
  • 举报
回复
netstat -an 查看当前端口占用情况

你是不是开了QQ在边上,QQ好像占用这6000 port
Jazzlover 2007-06-14
  • 打赏
  • 举报
回复
我猜:你可能需要把 socket 设成 blocking , 不然 recvfrom 应该立即就返回了。
daohua 2007-06-14
  • 打赏
  • 举报
回复
谢谢楼上的
zdleek 2007-06-14
  • 打赏
  • 举报
回复
如ls的ls所说,这是绑定失败。我在我这里测试是会等待的。

你改成这样就可以看到结果
int nErr = bind(sockSrv,(SOCKADDR *)&addr,sizeof(SOCKADDR));
if(SOCKET_ERROR == nErr)
{
printf("bind failed. error code: %d\n", WSAGetLastError());
return;
}
KanbaraHimi 2007-06-14
  • 打赏
  • 举报
回复
MARK
chenliankun 2007-06-14
  • 打赏
  • 举报
回复
这是绑定失败。
可能你换的端口号还是被占用了。
换个7000试试。
iroyal 2007-06-14
  • 打赏
  • 举报
回复
我也不会哦,帮你顶了 呵呵...
daohua 2007-06-14
  • 打赏
  • 举报
回复
顶一下啊 别称了
daohua 2007-06-14
  • 打赏
  • 举报
回复
我把断口号改了还是不行啊..
vcayi 2007-06-13
  • 打赏
  • 举报
回复
应该没有问题把,你的程序调用recvfrom一直阻塞在那里等待数据来,客户端不发数据给过去,他就不会执行后面的printf以下的代码的
daohua 2007-06-13
  • 打赏
  • 举报
回复
但是你试一下啊 ...结果是直接就press any key to continue

18,356

社区成员

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

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