Windows Socket编程笔记之最简单的小Demo
Windows Socket编程的大致过程:
服务器端:
----过程-------------对应的API-------
0.初始化 | WSAStartup()
1.创建Socket | socket()
2.绑定Socket | bind()
3.监听 | listen()
4.接受连接 | accept()
5.接收/发送数据 | recv()/send()
6.关闭socket | closesocket()
7.释放资源 | WSACleanup()
_____________________________________
客户端:
0.初始化 | WSAStartup()
1.创建Socket | socket()
2.连接Socket | connect()
3.接收/发送数据 | recv()/send()
4.关闭socket | closesocket()
5.释放资源 | WSACleanup()
_____________________________________
以下是按照上面所述步骤编写的服务器端和客户端最简单的一个小例子:
0.服务器端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | // FileName: Server.cpp // 服务器端 #include<stdio.h> #include<winsock.h> #include<windows.h> #pragma comment(lib,"ws2_32") #define PORT 2012 #define IP "127.0.0.1" void main() { // 0.初始化 WSADATA wsaData; WSAStartup(0x0202, &wsaData); // 1.创建Socket SOCKET sockServer; sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 2.绑定Socket struct sockaddr_in sockaddrServer; sockaddrServer.sin_family = AF_INET; sockaddrServer.sin_addr.S_un.S_addr = inet_addr(IP); sockaddrServer.sin_port = htons(PORT); memset (sockaddrServer.sin_zero, 0x00, 8); bind(sockServer, ( struct sockaddr*)&sockaddrServer, sizeof (sockaddrServer)); // 3.监听 listen(sockServer, 0); // 4.接受连接 struct sockaddr_in sockaddrClient; // 用于存放客户端地址信息 int addrlen = sizeof (sockaddrClient); SOCKET sockClient = accept(sockServer, ( struct sockaddr*)&sockaddrClient, &addrlen); printf ( "IP: %s\n" , inet_ntoa(sockaddrClient.sin_addr)); printf ( "PORT: %d\n" , ntohs(sockaddrClient.sin_port)); // 5.recv char buf[64] = {0}; recv(sockClient, buf, 64, 0); printf ( "Recv buf = %s\n" , buf); // 6.关闭Socket closesocket(sockServer); // 7.释放资源 WSACleanup(); } |
1.客户端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // FileName: Client.cpp // 客户端 #include<stdio.h> #include<winsock.h> #pragma comment(lib, "ws2_32") #define IP "127.0.0.1" #define PORT 2012 void main() { // 0.初始化 WSADATA wsaData; WSAStartup(0x0202, &wsaData); // 1.绑定Socket SOCKET sockServer= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 2.连接Socket struct sockaddr_in sockaddrServer; sockaddrServer.sin_family = AF_INET; sockaddrServer.sin_addr.S_un.S_addr = inet_addr(IP); sockaddrServer.sin_port = htons(2012); memset (sockaddrServer.sin_zero, 0x00, 8); connect(sockServer, ( struct sockaddr*)&sockaddrServer, sizeof (sockaddrServer)); // 3.send send(sockServer, "helloworld" , strlen ( "helloworld" ), 0); // 4.关闭Socket closesocket(sockServer); // 5.释放资源 WSACleanup(); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多
· C# 开发工具Visual Studio 介绍
· 在 Windows 10 上实现免密码 SSH 登录
· C#中如何使用异步编程