标签:
1.服务器端代码:
#include<iostream> #include<WinSock2.h> #pragma comment(lib, "ws2_32.lib") #define CONNECT_NUM_MAX 10 using namespace std; int main() { //加载套接字库 WSADATA wsaData; int iRet = 0; iRet = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iRet != 0) { cout << "WSAStartup(MAKEWORD(2, 2), &wsaData) execute failed!" << endl;; return -1; } if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion)) { WSACleanup(); cout << "WSADATA version is not correct!" << endl; return -1; } //创建套接字 SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket == INVALID_SOCKET) { cout << "serverSocket = socket(AF_INET, SOCK_STREAM, 0) execute failed!" << endl; return -1; } //初始化服务器地址族变量 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); //绑定 iRet = bind(serverSocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); if (iRet == SOCKET_ERROR) { cout << "bind(serverSocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) execute failed!" << endl; return -1; } //监听 iRet = listen(serverSocket, CONNECT_NUM_MAX); if (iRet == SOCKET_ERROR) { cout << "listen(serverSocket, 10) execute failed!" << endl; return -1; } //等待连接_接收_发送 SOCKADDR_IN clientAddr; int len = sizeof(SOCKADDR); while (1) { SOCKET connSocket = accept(serverSocket, (SOCKADDR*)&clientAddr, &len); if (connSocket == INVALID_SOCKET) { cout << "accept(serverSocket, (SOCKADDR*)&clientAddr, &len) execute failed!" << endl; return -1; } char sendBuf[100]; sprintf_s(sendBuf, "Welcome %s", inet_ntoa(clientAddr.sin_addr)); send(connSocket, sendBuf, strlen(sendBuf)+1, 0); char recvBuf[100]; recv(connSocket, recvBuf, 100, 0); printf("%s\n", recvBuf); closesocket(connSocket); } system("pause"); return 0; }
2.客户端代码:
#include<iostream> #include <winsock2.h> using namespace std; #pragma comment(lib, "ws2_32.lib") int main() { //加载套接字库 WSADATA wsaData; int iRet =0; iRet = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iRet != 0) { cout << "WSAStartup(MAKEWORD(2, 2), &wsaData) execute failed!" << endl; return -1; } if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion)) { WSACleanup(); cout << "WSADATA version is not correct!" << endl; return -1; } //创建套接字 SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0); if (clientSocket == INVALID_SOCKET) { cout << "clientSocket = socket(AF_INET, SOCK_STREAM, 0) execute failed!" << endl; return -1; } //初始化服务器端地址族变量 SOCKADDR_IN srvAddr; srvAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); srvAddr.sin_family = AF_INET; srvAddr.sin_port = htons(6000); //连接服务器 iRet = connect(clientSocket, (SOCKADDR*)&srvAddr, sizeof(SOCKADDR)); if (0 != iRet) { cout << "connect(clientSocket, (SOCKADDR*)&srvAddr, sizeof(SOCKADDR)) execute failed!" << endl; return -1; } //接收消息 char recvBuf[100]; recv(clientSocket, recvBuf, 100, 0); printf("%s\n", recvBuf); //发送消息 char sendBuf[100]; sprintf_s(sendBuf, "Hello, This is client %s", "兔子"); send(clientSocket, sendBuf, strlen(sendBuf)+1, 0); //清理 closesocket(clientSocket); WSACleanup(); system("pause"); return 0; }
3.程序运行截图:
c++ Windows Socket实现最简单的C/S网络通信(TCP)
标签:
原文地址:http://www.cnblogs.com/darren45/p/4818867.html