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; }