Experimento Programación 2_ de red (4) programa de servidor de socket de flujo Basado

#define _WINSOCK_DEPRECATED_NO_WARNINGS 
#include <iostream> 
#include <Winsock2.h> utilizando espacio de nombres std; #pragma comentario (lib, "Ws2_32.lib") #define PUERTO 7210
 #define DIRECCIÓN_IP "192.168.0.103"
 #define MAX_LINE 10000 
DWORD WINAPI ClientThread (LPVOID lpParameter) 
{ struct sockaddr_in ClientAddr;
    int addrlen = sizeof (ClientAddr); 
    SOCKET CientSocket = (socket) lpParameter;
    int iResult = 0 ;
    carbonizarse

 





    RecvBuffer [MAX_LINE];
    mientras que ( verdadera ) 
    { 
        memset (RecvBuffer, 0x00 , sizeof (RecvBuffer)); 
        iResult = recv (CientSocket, RecvBuffer, MAX_LINE, 0 ); 
        getpeername (CientSocket, ( struct sockaddr *) y ClientAddr, y addrlen);
        si (iResult == 0 || iResult == SOCKET_ERROR) 
        { 
            cout << " 客户" << inet_ntoa (ClientAddr.sin_addr) << " : " << << ClientAddr.sin_port"Salir " << endl;
             // cliente salidas 
            PAUSA ; 
        } 
        // servidor de información recibe la salida del 
        tribunal << " cliente " << inet_ntoa (ClientAddr.sin_addr) << " : " << ClientAddr.sin_port < < "dice: " << recvbuffer << endl; 
        iResult = Enviar (CientSocket, recvbuffer, ( int ) strlen (recvbuffer), 0 );
         // la parte posterior cadena recibida al cliente     } volver 0 ;
} Int principal ( int


     

argc, char * argv []) 
{ 
    WSADATA WSAData; 
    SOCKET ServerSocket, ClientSocket; 
    struct sockaddr_in localaddr, ClientAddr;
    int iReuslt = 0 ;
    int addrlen = 0 ; 
    MANGO hThread = NULL; 

    // Init Windows Socket 
    si (WSAStartup (MAKEWORD ( 2 , 2 ), y WSAData) =! 0 ) 
    { 
        cout << " Init Windows Socket Error :: " << WSAGetLastError () <<  endl;
        WSACleanup ();
        volver - 1 ; 
    } 

    // Crear Socket 
    ServerSocket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
    si (== ServerSocket INVALID_SOCKET) 
    { 
        cout << " 创建Socket ::失败" << WSAGetLastError () << endl; 
        closesocket (ServerSocket); 
        WSACleanup (); 
        volver - 1 ; 
    } 

    LocalAddr.sin_family = AF_INET; 
    LocalAddr.sin_addr.s_addr = htons (PORT); inet_addr (DIRECCIÓN_IP);
    LocalAddr.sin_port =
    memset (LocalAddr.sin_zero, 0x00 , 8 ); 

    // Enlazar Socket 
    iReuslt = bind (ServerSocket, ( struct sockaddr *) y localaddr, sizeof (localaddr));
    si (iReuslt =! 0 ) 
    { 
        cout << " Enlazar Socket Error :: " << WSAGetLastError () << endl; 
        WSACleanup (); 
        volver - 1 ; 
    } 
    // escuchar 
    iReuslt = escuchar (ServerSocket, 10 );
    si (iReuslt! = 0 )
    { 
        Cout << " escuchar Socket Error :: " << WSAGetLastError () << endl;
        volver - 1 ; 
    } 

    Cout << " 服务端已经启动" << endl; 

    mientras que ( verdadera ) 
    { 
        addrlen = sizeof (ClientAddr); 
        ClientSocket = aceptar (ServerSocket, ( struct sockaddr *) y ClientAddr, y addrlen);
        si (ClientSocket == INVALID_SOCKET)
        { 
            Cout << " Aceptar Error :: " << WSAGetLastError () << endl;
            romper ; 
        } 

        Cout << " 客户端连接:: " << inet_ntoa (ClientAddr.sin_addr) << " : " << ClientAddr.sin_port << endl; 

        hThread = CreateThread (NULL, 0 , ClientThread, (LPVOID) ClientSocket, 0 , NULL);
        si (hThread == NULL) 
        { 
            cout << " Crear secuencia Error! "<< endl;
             
        } 

        CloseHandle (hThread); 
    } 

    Closesocket (ServerSocket); 
    closesocket (ClientSocket); 
    WSACleanup (); 

    volver  0 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/cyx-b/p/12554930.html
Recomendado
Clasificación