TCPServer的实现

 
  
  1. #include <stdio.h> 
  2. #include <WINSOCK2.H> 
  3. #pragma comment (lib,"WS2_32.LIB") 
  4. int main(int ,char **) 
  5.     WORD wVersionRequested; 
  6.     WSADATA wsaData; 
  7.     int err; 
  8.     wVersionRequested = MAKEWORD( 2, 2 ); 
  9.     err = WSAStartup( wVersionRequested, &wsaData ); 
  10.     if ( err != 0 ) { 
  11.         return 1; 
  12.     } 
  13.     if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { 
  14.         WSACleanup( ); 
  15.         return 1;  
  16.     } 
  17.     SOCKET sockServer = socket(AF_INET,SOCK_STREAM,IPPROTO_IP); 
  18.     SOCKADDR_IN addrSockServer ; 
  19.     addrSockServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY); 
  20.     addrSockServer.sin_family = AF_INET; 
  21.     addrSockServer.sin_port   = htons(6000); 
  22.      
  23.     if( 0 != bind(sockServer,(SOCKADDR*)&addrSockServer,sizeof(SOCKADDR_IN))) 
  24.     { 
  25.         printf("bind error"); 
  26.         return 1; 
  27.     } 
  28.     if (0 != listen(sockServer,5)) 
  29.     { 
  30.          
  31.     } 
  32.     //定义客户端的socket地址 
  33.     SOCKADDR_IN addrClient; 
  34.     int len     = sizeof (addrClient); 
  35.     SOCKET  sockConn =  accept(sockServer,(SOCKADDR*)&addrClient,&len); 
  36.     if (INVALID_SOCKET == sockConn) 
  37.     { 
  38.         printf("accept error !\n"); 
  39.     } 
  40.     char buffer [256]; 
  41.     while (true
  42.     { 
  43.         int recvLen =recv(sockConn,buffer,sizeof(buffer),0);
    //通过返回值判断是否有错误,判断对端socket是否关闭  
  44.         if (SOCKET_ERROR == recvLen || 0 == recvLen ) 
  45.         { 
  46.             return 1; 
  47.         } 
  48.         printf("recvLen is :%d \n" ,recvLen); 
  49.         buffer[recvLen]='\0'
  50.         printf(buffer); 
  51.         printf("\n"); 
  52.     } 
  53.     return 0; 

TCPClient的实现

 
  
  1. #include <stdio.h> 
  2. #include <string.h> 
  3. #include <WINSOCK2.H> 
  4. #pragma comment (lib,"WS2_32.LIB") 
  5. int main(int ,char **) 
  6.     WORD wVersionRequested; 
  7.     WSADATA wsaData; 
  8.     int err; 
  9.     wVersionRequested = MAKEWORD( 2, 2 ); 
  10.     err = WSAStartup( wVersionRequested, &wsaData ); 
  11.     if ( err != 0 ) { 
  12.         return 1; 
  13.     } 
  14.     if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { 
  15.         WSACleanup( ); 
  16.         return 1;  
  17.     } 
  18.     SOCKET sockClient= socket(AF_INET,SOCK_STREAM,IPPROTO_IP); 
  19.     SOCKADDR_IN addrSockServer ; 
  20.     addrSockServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); 
  21.     addrSockServer.sin_family = AF_INET; 
  22.     addrSockServer.sin_port   = htons(6000); 
  23.     //  addrSockServer.sin_zero   = {0}; 
  24.     if (SOCKET_ERROR==connect(sockClient,(SOCKADDR*)&addrSockServer,sizeof (SOCKADDR))) 
  25.     { 
  26.         printf("error connect"); 
  27.         return 1; 
  28.     } 
  29.     char buffer[256] ={0}; 
  30.     while (true
  31.     { 
  32.         scanf("%s",buffer); 
  33.         if (strcmp(buffer,"exit") == 0) 
  34.         { 
  35.             break
  36.         } 
  37. //通过返回值判断socket是否断开
  38.         if (SOCKET_ERROR  == send(sockClient,buffer,strlen(buffer),0)) 
  39.         { 
  40.             printf("socket error !\n "); 
  41.             break
  42.         } 
  43.     } 
  44.     WSACleanup(); 
  45.     return 0;