我的理解:服务器socket listen 之后,
客户端connect ,但要在服务器accept 之后,客户端connect才会返回(阻塞情况下)测试结果:
服务器只置listen状态,没有accept操作,客户端connect马上返回0(表示成功)
connect返回0,表示告诉客户端,连接已经成功,但似乎....?
当然,服务器与客户端都在同一台机器上操作,不知道有没有影响
客户端connect ,但要在服务器accept 之后,客户端connect才会返回(阻塞情况下)测试结果:
服务器只置listen状态,没有accept操作,客户端connect马上返回0(表示成功)
connect返回0,表示告诉客户端,连接已经成功,但似乎....?
当然,服务器与客户端都在同一台机器上操作,不知道有没有影响
服务器端// 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);
int nRet = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) );
都是返回0