windows socket data exchange

client

//ip地址 端口
SOCKET init(const char *IP, u_short port) {
    WSADATA wd;
    int ret = WSAStartup(MAKEWORD(2, 2), &wd);
    if (ret != 0) {
        cout << "WSAStartup error ..." << endl;
        return INVALID_SOCKET;
    }
    cout << "WSAStartup success ..." << endl;

    //创建套接字
    SOCKET skt = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    IF (SKT == of SOCKET_ERROR is) { 
        COUT << " Socket error ... " << endl;
         return INVALID_SOCKET is; 
    } 
    COUT << " Socket Success ... " << endl; 

    // server information 
    the sockaddr_in addrServ; 
    addrServ. the sin_family = AF_INET; // the IPV4 protocol 
    addrServ.sin_port = the htons (port); // port 
    addrServ.sin_addr.s_addr the inet_addr = (the IP); // the IP address 

    // connect to the server 
    IF (connect (SKT, (the sockaddr *) & addrServ ,sizeof(addrServ)) == SOCKET_ERROR) {
        cout << "connect error ..." << endl;
        return -1;
    }
    cout << "connect success ..." << endl;

    return skt;
}

void destroy(SOCKET skt) {
    closesocket(skt);
    WSACleanup();
}

void printMenu() {
    printf("*************************\n");
    printf("*getName                *\n" ); 
    Printf ( " * getAge * \ the n- " ); 
    printf ( " * Exit * \ the n- " ); 
    printf ( " ********************** *** \ n- " ); 
} 

// Socket client code for client sending command accepting message sent by the server 
int function06 () { 
    SOCKET sktCli = the init ( " 192.168.3.18 " , 8080 );
     IF (sktCli == INVALID_SOCKET is) {
         return - . 1 ; 
    } 

    the while ( to true ) {
        printMenu();
        char szCmd[64] = {0};
        scanf("%s", szCmd);
        if (strcmp(szCmd, "exit") == 0) {
            printf("[client] exit ...\n");
            break;
        }
        send(sktCli, szCmd, strlen(szCmd)+1, 0);

        char szRecv[1024] = {0};
        int ret = recv(sktCli, szRecv, sizeof(szRecv), 0);
        if (ret <= 0) {
            printf("[client] server exit ...\n");
            break;
        }
        printf("[server] msg:%s\n", szRecv);
    }

    destroy(sktCli);
    return 0;
}

server

//初始化
SOCKET init(const char *IP, u_short port) {
    WSADATA wd;
    int ret = WSAStartup(MAKEWORD(2, 2), &wd);
    if (ret != 0) {
        cout << "WSAStartup error ..." << endl;
        return -1;
    }
    cout << "WSAStartup success ..." << endl;

    //创建套接字
    SOCKET skt =Socket (AF_INET, SOCK_STREAM, IPPROTO_TCP go);
     IF (SKT == INVALID_SOCKET is) { 
        COUT << " Socket error ... " << endl;
         return - . 1 ; 
    } 
    COUT << " Socket Success ... " << endl;
     // server information 
    sockaddr_in addrServ; 
    addrServ.sin_family = AF_INET; 
    addrServ.sin_port = htons (port); 
    addrServ.sin_addr.s_addr = inet_addr (IP); 

    // bind a socket port and ip 
    IF (bind(skt, (sockaddr *)&addrServ, sizeof(addrServ)) == SOCKET_ERROR) {
        cout << "bind error ..." << endl;
        return -1;
    }
    cout << "bind success ..." << endl;

    //开始监听套接字
    if (listen(skt, SOMAXCONN) == SOCKET_ERROR) {
        cout << "listen error ..." << endl;
        return -1;
    }
    cout << " The listen Success ... " << endl; 

    return SKT; 
} 

void the destroy (SOCKET SKT) { 
    the closesocket (SKT); 
    WSACleanup (); 
} 

// accepts commands sent by the client sends a message to the client 
int function06 () { 
    sktServ SOCKET = the init ( " 0.0.0.0 " , 8080 );
     IF (sktServ == INVALID_SOCKET is) {
         return - . 1 ; 
    } 

    SOCKET sktCli = Accept (sktServ, NULL, NULL);
     the while ( to true ) {
        char szCmd[64] = {0};
        int ret = recv(sktCli, szCmd, sizeof(szCmd), 0);
        if (ret == SOCKET_ERROR) {
            printf("[server] recv error ...\n");
            break;
        }
        if (ret == 0) {
            printf("[client] exit ...\n");
            break;
        }
        printf("[client] %s\n", szCmd);
        char szMsg[1024];
        if (strcmp(szCmd, "getName") == 0) {
            sprintf(szMsg, "%s", "爱白菜的小昆虫.");
        }
        else if (strcmp(szCmd, "getAge") == 0) {
            sprintf(szMsg, "%s", "1000.");
        }
        else {
            sprintf(szMsg, "%s", "???.");
        }
        send(sktCli, szMsg, strlen(szMsg)+1, 0);
    }

    destroy(sktServ);
    return 0;
}

 

Guess you like

Origin www.cnblogs.com/xuqiulin/p/11432890.html