socket的accept为什么没有阻塞进程

C++语言 码拜 8年前 (2016-04-15) 1203次浏览
#include<winsock2.h>
#include<stdio.h>
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSADATA wsaData;
SOCKET sockServer;
SOCKADDR_IN addrServer;
SOCKET sockClient;
SOCKADDR_IN addrClient;
WSAStartup(MAKEWORD(2,2),&wsaData);
sockServer=socket(AF_INET,SOCK_STREAM,0);
addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY表示任何IP
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(6000);//绑定端口6000
bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
 
//Listen监听端
listen(sockServer,5);//5为等待连接数目
printf("服务器已启动:\n监听中...\n");
int len=sizeof(SOCKADDR);
char sendBuf[100];//发送至客户端的字符串
char recvBuf[100];//接受客户端返回的字符串
 
//会阻塞进程,直到有客户端连接上来为止
sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&len);
//接收并打印客户端数据
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
 
//关闭socket
closesocket(sockClient);
WSACleanup();}

初次接触socket,本人在百度百科抄的socket服务端的代码,用VS2008调试的时候为什么到accept
函数的时候都是直接过没有阻塞呢?本人点击运行也是直接就跑完了。而且看recVBuf和addrClient
里面都是初始化的值。

解决方案

5

“用VS2008调试的时候”….没发现你调试了。
你知不知道什么叫断点?什么叫单步?什么叫错误码?
赵老师,上!

5

改在MSDN98例子代码中抄。
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl
SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLES.C
SAMPLES\VC98\SDK\NETDS\WINSOCK\SIMPLE\SIMPLEC.C

10

WSAStartup socket bind等这些函数,看一下返回值,函数调用失败就会异常就会退出的啦。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明socket的accept为什么没有阻塞进程
喜欢 (0)
[1034331897@qq.com]
分享 (0)