多机进程通信协议C++
时间: 2023-10-04 08:05:58 浏览: 42
在 C++ 中,可以使用 Socket 编程实现多机进程通信。Socket 是一种网络通信的接口,在不同机器间传递数据。以下是一个简单的实现多机进程通信的示例:
服务器端代码:
```c++
// 头文件
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
// 宏定义
#define PORT 8888
#define MAXLINE 1024
int main()
{
int server_fd, conn_fd;
struct sockaddr_in server_addr, client_addr;
socklen_t client_len;
char buf[MAXLINE] = {0};
int len;
// 创建 Socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
std::cerr << "Socket Create Failed!" << std::endl;
return -1;
}
// 设置 Socket 地址和端口
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
// 绑定 Socket
if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
std::cerr << "Socket Bind Failed!" << std::endl;
return -1;
}
// 监听 Socket
if (listen(server_fd, 10) == -1)
{
std::cerr << "Socket Listen Failed!" << std::endl;
return -1;
}
std::cout << "Server Start Listening..." << std::endl;
// 接收 Socket 连接
client_len = sizeof(client_addr);
conn_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_len);
if (conn_fd == -1)
{
std::cerr << "Socket Accept Failed!" << std::endl;
return -1;
}
std::cout << "Client Connected: " << inet_ntoa(client_addr.sin_addr) << ":" << ntohs(client_addr.sin_port) << std::endl;
// 读取 Socket 数据
while ((len = read(conn_fd, buf, MAXLINE)) > 0)
{
std::cout << "Receive from client: " << buf << std::endl;
write(conn_fd, buf, len);
}
// 关闭 Socket 连接
close(conn_fd);
close(server_fd);
std::cout << "Server Stop!" << std::endl;
return 0;
}
```
客户端代码:
```c++
// 头文件
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
// 宏定义
#define PORT 8888
#define MAXLINE 1024
int main()
{
int client_fd;
struct sockaddr_in server_addr;
char buf[MAXLINE] = {0};
int len;
// 创建 Socket
if ((client_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
std::cerr << "Socket Create Failed!" << std::endl;
return -1;
}
// 设置 Socket 地址和端口
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接 Socket
if (connect(client_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1)
{
std::cerr << "Socket Connect Failed!" << std::endl;
return -1;
}
std::cout << "Connect to Server: " << inet_ntoa(server_addr.sin_addr) << ":" << ntohs(server_addr.sin_port) << std::endl;
// 发送 Socket 数据
while (std::cin.getline(buf, MAXLINE))
{
write(client_fd, buf, strlen(buf));
len = read(client_fd, buf, MAXLINE);
buf[len] = '\0';
std::cout << "Receive from server: " << buf << std::endl;
}
// 关闭 Socket 连接
close(client_fd);
std::cout << "Client Stop!" << std::endl;
return 0;
}
```
在程序中,服务器端先创建 Socket,并设置 Socket 地址和端口,然后绑定 Socket,并开始监听 Socket 连接。当有客户端连接时,接受 Socket 连接,并读取 Socket 数据,然后将数据写回客户端。客户端先创建 Socket,并设置 Socket 地址和端口,然后连接 Socket,发送 Socket 数据,并读取 Socket 数据。最后,关闭 Socket 连接。
以上是一个简单的多机进程通信的示例,具体实现还需根据具体需求进行调整。