ZBLOG

通过socket实现本机不同进程间通信demo

下面是一个通过Socket实现本机不同进程间通信的简单示例:

  1. 创建服务端代码(server.cpp):
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    
    // 创建 socket 文件描述符
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    
    // 设置端口复用
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
                   &opt, sizeof(opt))) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
    
    address.sin_family = AF_INET;  // IPv4
    address.sin_addr.s_addr = INADDR_ANY;  // 监听所有网络接口
    address.sin_port = htons(8080);  // 使用8080端口
    
    // 绑定 IP 地址和端口号到套接字
    if (bind(server_fd, (struct sockaddr *)&address,
             sizeof(address))<0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    
    // 开始监听连接请求
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    
    std::cout << "Server listening on port 8080" << std::endl;

	// 等待客户端连接并处理请求
	while ((new_socket = accept(server_fd,
                            (struct sockaddr *)&address,
                            (socklen_t*)&addrlen)) > 0) {
        // 在此处处理客户端请求,可以发送和接收数据
        // 例如,可以通过read()函数从套接字接收数据,通过write()函数向套接字发送数据
        
        close(new_socket);  // 关闭连接
    }
    
    return 0;
}
  1. 创建客户端代码(client.cpp):
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int client_fd;
    struct sockaddr_in server_address;
    
    if ((client_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    
    server_address.sin_family = AF_INET;  // IPv4
    server_address.sin_port = htons(8080);  // 连接到8080端口
    
    // 将IP地址从字符串转换为网络字节序
    if(inet_pton(AF_INET, "127.0.0.1", &(server_address.sin_addr)) <= 0) {
        perror("Invalid address/ Address not supported");
        exit(EXIT_FAILURE);
    }
    
	// 连接到服务器
	if (connect(client_fd, (struct sockaddr *)&server_address,
				sizeof(server_address)) < 0) {
		perror("Connection Failed");
		exit(EXIT_FAILURE);
	}
    
    std::cout << "Connected to the server" << std::endl;

	// 在此处进行与服务端的通信,可以发送和接收数据
	// 例如,可以使用write()函数向服务器发送数据,并使用read()函数从服务器接收数据

	close(client_fd);   // 关闭连接

	return 0;
}
  1. 分别编译服务端和客户端代码,并运行它们。

  2. 这样,你就可以在本地不同的进程之间通过Socket实现通信了。可以根据需要自定义数据交互的格式和协议。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=2262

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?