首页 > 代码库 > 基于Windows的套接字相关函数及示例
基于Windows的套接字相关函数及示例
链接ws2_32.lib库
头文件#include <winsock2.h>
Winsock初始化
1 int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
wVersionRequested:Winsock版本信息,用MAKEWORD宏构造,MAKEWORD(2,2)。
lpWSAData:WSADATA结构体变量的地址。
1 #include <WinSock2.h> 2 #include <iostream> 3 4 namespace WinSock { 5 6 void ErrorHandling(char* message) { 7 std::cerr << message << std::endl; 8 exit(1); 9 }10 11 int Server(int port) {12 WSADATA wsaData;13 SOCKET hServSock, hClntSock;14 SOCKADDR_IN servAddr, clntAddr;15 int szClntAddr;16 char message[] = "Hello World!";17 if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error");18 hServSock = socket(PF_INET, SOCK_STREAM, 0);19 if (hServSock == INVALID_SOCKET) ErrorHandling("socket() error");20 memset(&servAddr, 0, sizeof(servAddr));21 servAddr.sin_family = AF_INET;22 servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);23 servAddr.sin_port = htons(port);24 if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("bind() error");25 if (listen(hServSock, 5) == SOCKET_ERROR) ErrorHandling("listen() error");26 szClntAddr = sizeof(clntAddr);27 hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);28 if (hClntSock == INVALID_SOCKET) ErrorHandling("accept() error");29 send(hClntSock, message, sizeof(message), 0);30 closesocket(hClntSock);31 closesocket(hServSock);32 WSACleanup();33 return 0;34 }35 36 int Client(char ip[], int port) {37 WSADATA wsaData;38 SOCKET hSocket;39 SOCKADDR_IN servAddr;40 char message[30];41 int strLen;42 if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error");43 hSocket = socket(PF_INET, SOCK_STREAM, 0);44 if (hSocket == INVALID_SOCKET) ErrorHandling("socket() error");45 memset(&servAddr, 0, sizeof(servAddr));46 servAddr.sin_family = AF_INET;47 servAddr.sin_addr.S_un.S_addr = inet_addr(ip);48 servAddr.sin_port = htons(port);49 if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("connect() error");50 strLen = recv(hSocket, message, sizeof(message) - 1, 0);51 if (strLen == -1) ErrorHandling("read() error");52 std::cout << "Message from server: " << message << std::endl;53 closesocket(hSocket);54 WSACleanup();55 return 0;56 }57 58 };
基于Windows的套接字相关函数及示例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。