socket_TCP
1、服务端
#include <WinSock2.h> #include<Windows.h> #include <process.h> #include <vector> #pragma comment(lib, "ws2_32.lib") SOCKET socket_Client = INVALID_SOCKET; unsigned __stdcall recvThreadFunc(void * lParam) { char recvBuf[MAXBYTE] = {0}; while (true) { if (recv(socket_Client, recvBuf, MAXBYTE, 0) == SOCKET_ERROR) break; printf("Recv : %s\r\n", recvBuf); } return 0; } int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData)) return -1; if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion != 2)) return -1; printf("Server access ... \r\n"); SOCKET socket_Server = socket(AF_INET, SOCK_STREAM, 0); if (socket_Server == INVALID_SOCKET) return -1; sockaddr_in sockaddr_in_Server, sockaddr_in_Client; sockaddr_in_Server.sin_family = AF_INET; sockaddr_in_Server.sin_port = htons(1234); sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b1 = 127; sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b2 = 0; sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b3 = 0; sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b4 = 1; if (bind(socket_Server, (sockaddr *)&sockaddr_in_Server, sizeof(sockaddr_in_Server)) == SOCKET_ERROR) return -1; if (listen(socket_Server, 1) == SOCKET_ERROR) return -1; char recvBuf[MAXBYTE] = {0}; char sendBuf[MAXBYTE] = {0}; int sockaddr_in_Len = sizeof(sockaddr_in); std::vector<HANDLE> vecThreadHandle; while (true) { socket_Client = accept(socket_Server, (sockaddr *)&sockaddr_in_Client, &sockaddr_in_Len); if (socket_Client == SOCKET_ERROR) break; printf("%d.%d.%d.%d\t%d\r\n", sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b1, sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b2 , sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b3, sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b4, sockaddr_in_Client.sin_port); HANDLE hRecvThread = (HANDLE)_beginthreadex(nullptr, 0, recvThreadFunc, nullptr, NULL, nullptr); if (hRecvThread != INVALID_HANDLE_VALUE) vecThreadHandle.push_back(hRecvThread); } for each (auto var in vecThreadHandle) { CloseHandle(var); } closesocket(socket_Client); closesocket(socket_Server); WSACleanup(); return 0; }
2、客户端
#include <WinSock2.h> #include<Windows.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData)) return -1; if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion != 2)) return -1; printf("Client access ... \r\n"); SOCKET socket_Client = socket(AF_INET, SOCK_STREAM, 0); if (socket_Client == INVALID_SOCKET) return -1; sockaddr_in sockaddr_in_Client; sockaddr_in_Client.sin_family = AF_INET; sockaddr_in_Client.sin_port = htons(1234); sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b1 = 127; sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b2 = 0; sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b3 = 0; sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b4 = 1; if (connect(socket_Client, (sockaddr *)&sockaddr_in_Client, sizeof(sockaddr_in_Client)) == SOCKET_ERROR) return -1; char recvBuf[MAXBYTE] = {0}; char sendBuf[MAXBYTE] = {0}; int sockaddr_in_Len = sizeof(sockaddr_in); while (true) { scanf_s("%s", sendBuf, MAXBYTE); if (strcmp(sendBuf, "exit") == 0) break; if (send(socket_Client, sendBuf, strlen(sendBuf) + sizeof(char), 0) == SOCKET_ERROR) break; } closesocket(socket_Client); WSACleanup(); return 0; }