#include "stdafx.h" #include "WINSOCK2.H" #pragma comment(lib,"WS2_32.lib") #define BUF_SIZE 64 //缓冲区大小 int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsd;//存储WSAStartup返回的数据windows socket数据。 SOCKET server; //服务器套接字 SOCKET client; //客户端套接字 int retVal; char buf[BUF_SIZE]; //初始化动态库套接字 //WSAStartup Winsock初始化 ZeroMemory(buf, BUF_SIZE); if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) { printf("WSAStartup failed 1/n"); return 1; } //创建套接字 //AF_INET IPV4套接字类型 //AF_INET6 IPV6套接字类型 //AF_UNIX Unix套接字类型 //SOCK_STREAM TCP协议 //SOCK_DGRAM UDP协议 //SOCK_RAW 特殊的IPV4,可以处理ICMP、IGMP等网络报文 //INVALID_SOCKET socket创建失败 server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == server) { printf("socket failed !/n"); WSACleanup(); return -1; } //服务器套接地址 //sin_family 协议簇 //sin_addr 地址 //htonl()--"Host to Network Long" //ntohl()--"Network to Host Long" //htons()--"Host to Network Short" //ntohs()--"Network to Host Short" //INADDR_ANY inet_addr("0.0.0.0")监听所有网络 //SOCKADDR_IN SOCKADDR 网络地址 SOCKADDR_IN addserver; addserver.sin_family = AF_INET; addserver.sin_port = htons(4999); addserver.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //绑定套接字 retVal = bind(server, (const struct sockaddr*)&addserver, sizeof(SOCKADDR_IN)); if (SOCKET_ERROR == retVal) { printf("bind failed !/n"); closesocket(server); WSACleanup(); return false; } //监听套接字 retVal = listen(server, 1); if (SOCKET_ERROR == retVal) { printf("listen failed!/n"); closesocket(server); WSACleanup(); return false; } //接受客户端数据 //accept 建立链接 返回一个SOCKET类型的值,表示接收到的套接字的描述符,否则返回INVALID_SOCKET _In_ SOCKET s, sockaddr_in addrClient; int addrClintlen = sizeof(addrClient); client = accept(server, (sockaddr FAR*)&addrClient, &addrClintlen); { printf("accept failed !/n"); closesocket(server); WSACleanup(); return -1; } //接收客户端套接字 retVal = recv(client, buf, BUF_SIZE, 0); if (SOCKET_ERROR == retVal) { printf("recv failed !/n"); closesocket(server); closesocket(client); WSACleanup(); return false; } //退出程序 printf("Recv From Client:%s/n", buf); retVal = send(client, "Hello Word!", strlen("Hello word!"), 0); if (SOCKET_ERROR == retVal) { printf("send failed !/n"); closesocket(server); closesocket(client); WSACleanup(); return false; } closesocket(server); closesocket(client); WSACleanup(); return 0; }