原文作者:aircraft
原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html
c++ 網絡編程(一)TCP/IP 入門級客戶端與服務端交互代碼
測試環境:VS2013
一.服務端代碼
#define _WINSOCK_DEPRECATED_NO_WARNINGS #include <WinSock2.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib, "ws2_32.lib") void main() { WSADATA wsaData; int port = 5099; char buf[] = "Server: hello, I am a server....."; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to load Winsock"); return; } //創建用於監聽的套接字 SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(port); //1024以上的端口號 addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); int retVal = bind(sockSrv, (LPSOCKADDR)&addrSrv, sizeof(SOCKADDR_IN)); if (retVal == SOCKET_ERROR){ printf("Failed bind:%d\n", WSAGetLastError()); return; } if (listen(sockSrv, 10) == SOCKET_ERROR){ printf("Listen failed:%d", WSAGetLastError()); return; } SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); while (1) { //等待客戶請求到來 SOCKET sockConn = accept(sockSrv, (SOCKADDR *)&addrClient, &len); if (sockConn == SOCKET_ERROR){ printf("Accept failed:%d", WSAGetLastError()); break; } printf("Accept client IP:[%s]\n", inet_ntoa(addrClient.sin_addr)); //發送數據 int iSend = send(sockConn, buf, sizeof(buf), 0); if (iSend == SOCKET_ERROR){ printf("send failed"); break; } char recvBuf[100]; memset(recvBuf, 0, sizeof(recvBuf)); // //接收數據 recv(sockConn, recvBuf, sizeof(recvBuf), 0); printf("%s\n", recvBuf); closesocket(sockConn); } closesocket(sockSrv); WSACleanup(); system("pause"); }
二.客戶端代碼
#define _WINSOCK_DEPRECATED_NO_WARNINGS #include <WinSock2.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") void main() { //加載套接字 WSADATA wsaData; char buff[1024]; memset(buff, 0, sizeof(buff)); if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to load Winsock"); return; } SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(5099); addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //創建套接字 SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); if (SOCKET_ERROR == sockClient){ printf("Socket() error:%d", WSAGetLastError()); return; } //向服務器發出連接請求 if (connect(sockClient, (struct sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET){ printf("Connect failed:%d", WSAGetLastError()); return; } else { //接收數據 recv(sockClient, buff, sizeof(buff), 0); printf("%s\n", buff); } //發送數據 char *buffSend = "hello, this is a Client...."; send(sockClient, buffSend, strlen(buffSend) + 1, 0); printf("%d", strlen(buffSend) + 1); //關閉套接字 closesocket(sockClient); WSACleanup(); system("pause"); }
怕某些小白不懂我詳細說說運行,運行時先開服務端,在開客戶端運行 ,也就是開兩個cPP文件分別運行,兩個cpp各是一個小項目代碼 不要放在一起
這裏的127.0.0.1是代表本地的地址,你們想實現兩機交互就用對方的地址。
代碼很簡單,想要直接拿去,接下來直接看運行結果: