C++ socket进行本地通信代码示例
时间: 2023-09-03 07:10:10 浏览: 151
以下是一个简单的 C++ 示例,演示了如何使用 socket 进行本地通信(基于 TCP 协议):
```cpp
#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
// 创建服务器 socket
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == -1) {
std::cerr << "服务器 socket 创建失败" << std::endl;
return 1;
}
// 绑定服务器 IP 和端口
sockaddr_in serverAddress{};
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY; // 使用本地 IP 地址
serverAddress.sin_port = htons(8888); // 使用端口 8888
if (bind(serverSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0) {
std::cerr << "绑定地址失败" << std::endl;
return 1;
}
// 监听连接
if (listen(serverSocket, 1) < 0) {
std::cerr << "监听连接失败" << std::endl;
return 1;
}
std::cout << "等待客户端连接..." << std::endl;
// 接受客户端连接
sockaddr_in clientAddress{};
socklen_t clientAddressLength = sizeof(clientAddress);
int clientSocket = accept(serverSocket, (struct sockaddr *) &clientAddress, &clientAddressLength);
if (clientSocket < 0) {
std::cerr << "接受客户端连接失败" << std::endl;
return 1;
}
std::cout << "客户端连接成功" << std::endl;
// 发送和接收数据
char buffer[1024] = {0};
std::string message;
while (true) {
// 从客户端接收数据
memset(buffer, 0, sizeof(buffer));
int bytesRead = read(clientSocket, buffer, sizeof(buffer));
if (bytesRead <= 0) {
std::cerr << "接收数据失败" << std::endl;
break;
}
std::cout << "接收到来自客户端的消息: " << buffer << std::endl;
// 向客户端发送数据
std::cout << "请输入要发送给客户端的消息: ";
std::getline(std::cin, message);
if (message == "exit") {
break;
}
send(clientSocket, message.c_str(), message.length(), 0);
}
// 关闭连接
close(clientSocket);
close(serverSocket);
return 0;
}
```
这段代码创建了一个简单的服务器,绑定在本地 IP 地址上的 8888 端口。它通过 `accept` 方法等待客户端连接,然后通过 `read` 和 `send` 方法进行数据的接收和发送。在服务器端输入 "exit" 可以退出程序。
请注意,此示例仅用于演示基本的 socket 通信流程,没有考虑错误处理和多客户端支持。在实际应用中,您可能需要添加更多的逻辑来处理错误、支持多个客户端连接等。
阅读全文