C++中TCP/IP套接字编程需创建套接字、绑定地址、监听或连接、收发数据、关闭资源;Windows需初始化WSA,跨平台需处理头文件、关闭函数差异,并注意端口复用、字节序转换与错误处理。

在C++中实现TCP/IP套接字编程,主要依赖操作系统提供的Socket API。Windows和Linux平台的接口略有不同,但基本流程相似:创建套接字、绑定地址、监听(服务端)、连接(客户端)、收发数据、关闭套接字。下面以跨平台思路为基础,分别说明核心步骤与代码实现。
服务端程序负责监听指定端口,等待客户端连接,并处理通信请求。关键步骤如下:
示例代码(Windows平台):
#include <winsock2.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
<p>int main() {
WSADATA wsa;
SOCKET server, client;
sockaddr_in serv_addr, cli_addr;
int addrlen = sizeof(cli_addr);</p><pre class='brush:php;toolbar:false;'>WSAStartup(MAKEWORD(2,2), &wsa);
server = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(8080);
bind(server, (sockaddr*)&serv_addr, sizeof(serv_addr));
listen(server, 3);
std::cout << "等待客户端连接...\n";
client = accept(server, (sockaddr*)&cli_addr, &addrlen);
char buffer[1024] = {0};
recv(client, buffer, sizeof(buffer), 0);
std::cout << "收到消息: " << buffer << std::endl;
const char* reply = "Hello from server";
send(client, reply, strlen(reply), 0);
closesocket(client);
closesocket(server);
WSACleanup();
return 0;}
立即学习“C++免费学习笔记(深入)”;
客户端主动连接服务端,发送请求并接收响应。流程更简单:
客户端示例代码:
#include <winsock2.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
<p>int main() {
WSADATA wsa;
SOCKET sock;
sockaddr_in serv_addr;</p><pre class='brush:php;toolbar:false;'>WSAStartup(MAKEWORD(2,2), &wsa);
sock = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8080);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sock, (sockaddr*)&serv_addr, sizeof(serv_addr)) == 0) {
const char* msg = "Hello Server";
send(sock, msg, strlen(msg), 0);
char buffer[1024] = {0};
recv(sock, buffer, sizeof(buffer), 0);
std::cout << "服务器回复: " << buffer << std::endl;
}
closesocket(sock);
WSACleanup();
return 0;}
立即学习“C++免费学习笔记(深入)”;
Linux与Windows在Socket编程上的主要差异包括:
可通过宏定义简化跨平台兼容性:
#ifdef _WIN32 #include <winsock2.h> #define close closesocket #else #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #endif
实际开发中需要注意以下几点:
基本上就这些。掌握基础Socket流程后,可进一步实现非阻塞通信、心跳机制、协议封装等功能。
以上就是c++++ 如何实现TCP/IP套接字编程_c++网络编程基础与Socket通信实现的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号