基础问题,connect函数什么时候返回?

saiyaman5 2009-12-16 02:22:01
我的理解:

服务器socket listen 之后,
客户端connect ,但要在服务器accept 之后,客户端connect才会返回(阻塞情况下)

测试结果:
服务器只置listen状态,没有accept操作,客户端connect马上返回0(表示成功)


connect返回0,表示告诉客户端,连接已经成功,但似乎....?
当然,服务器与客户端都在同一台机器上操作,不知道有没有影响
...全文
251 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
thirddata 2009-12-16
  • 打赏
  • 举报
回复
可能是你的电脑上有另外一个程序使用6000端口,并且接受了你的连接,你应该检查一下你的服务端的程序bind和listen的返回值,是否是成功的。
saiyaman5 2009-12-16
  • 打赏
  • 举报
回复
服务器进入Sleep状态之后,
int nRet = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) );
都是返回0
saiyaman5 2009-12-16
  • 打赏
  • 举报
回复

服务器端

// Initialize Winsock
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);

//-----------------------------------------
// Create a listening socket bound to a local
// IP address and the port specified
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
u_short port = 6000;
char* ip;
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_port = htons(port);
/*hostent* thisHost;
thisHost = gethostbyname("");
ip = inet_ntoa (*(struct in_addr *)*thisHost->h_addr_list);

service.sin_addr.s_addr = inet_addr(ip);*/

service.sin_addr.s_addr = htonl(INADDR_ANY);

//-----------------------------------------
// Bind the listening socket to the local IP address
// and port number
bind(ListenSocket, (SOCKADDR *) &service, sizeof(SOCKADDR));

//-----------------------------------------
// Set the socket to listen for incoming
// connection requests
listen(ListenSocket, 1);
printf("Listening...\n");
Sleep(100000);



客户端

WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
return;
}

sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 6000 );

int nRet = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) );

if ( nRet == SOCKET_ERROR) {
DWORD dw = GetLastError();
return;
}

printf("socket %d connected\n",i);
Wenxy1 2009-12-16
  • 打赏
  • 举报
回复
理论上是不可能的。
请贴上你的代码。

18,356

社区成员

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

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