socket编程中listen函数调用失败

wjg945 2013-04-24 02:01:09
最近在VS2010里面学习socket,从网上借鉴了一个TCPsender的代码,发现执行到listen()函数的时候就失败了从而结束进程。找了半天没发现原因,求指点~


SOCKET sock, clientSocket; //socket
char szMsg[] = "this is a UDP test package";//被发送的字段

//1.启动SOCKET库,版本为2.0
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 0 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
cout<<"Socket2.0初始化失败,Exit!";
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 )
{
WSACleanup( );
return 0;
}

//2.创建socket,
sock = socket(
AF_INET, //internetwork: UDP, TCP, etc
SOCK_STREAM, //SOCK_STREAM说明是TCP socket
0 //protocol
);

if (sock == INVALID_SOCKET )
{
cout<<"Socket 创建失败,Exit!";
return 0;
}

//3.bind套接字,相当于给本地套接字赋值
sockaddr_in myaddr;
memset(&myaddr,0,sizeof(myaddr));
myaddr.sin_family=AF_INET;

myaddr.sin_addr.s_addr = inet_addr("192.168.0.7");
myaddr.sin_port=htons(7861);
bind(sock,(sockaddr*)&myaddr,sizeof(myaddr));

//4.设置发往的地址
sockaddr_in addrto; //发往的地址
memset(&addrto,0,sizeof(addrto));
addrto.sin_family=AF_INET;
addrto.sin_addr.s_addr=inet_addr("192.168.0.9");
//端口号必须和服务器绑定的端口号一致
addrto.sin_port=htons(7861);

//5.listen 另一端的socket
if (listen(sock,5) == SOCKET_ERROR )
{
closesocket(sock);
WSACleanup();
abort();
}
else
{
cout<<"listen succeed!"<<endl;
}
...全文
925 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-04-24
  • 打赏
  • 举报
回复
netstat -na
  • 打赏
  • 举报
回复
int err = GetLastError(); 看看err的数值是多少,然后再去找对应数值的错误

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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