C语言使用udp进行进程间全双工通信代码

时间: 2023-06-11 13:09:27 浏览: 60
以下是使用UDP进行进程间全双工通信的示例代码: // Server端代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 8080 #define MAX_BUFFER_SIZE 1024 int main() { int server_fd, client_fd, recv_len; struct sockaddr_in server_addr, client_addr; char buffer[MAX_BUFFER_SIZE] = {0}; socklen_t addr_len = sizeof(client_addr); // 创建UDP套接字 if ((server_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } memset(&server_addr, 0, sizeof(server_addr)); // 设置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT); // 绑定套接字 if (bind(server_fd, (const struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } while (1) { // 从客户端接收数据 recv_len = recvfrom(server_fd, buffer, MAX_BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *)&client_addr, &addr_len); buffer[recv_len] = '\0'; printf("Client: %s\n", buffer); // 向客户端发送数据 printf("Server: "); fgets(buffer, MAX_BUFFER_SIZE, stdin); sendto(server_fd, buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *)&client_addr, addr_len); } close(server_fd); return 0; } // Client端代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8080 #define MAX_BUFFER_SIZE 1024 int main() { int client_fd, recv_len; struct sockaddr_in server_addr; char buffer[MAX_BUFFER_SIZE] = {0}; // 创建UDP套接字 if ((client_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } memset(&server_addr, 0, sizeof(server_addr)); // 设置服务器地址 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) { perror("inet_pton failed"); exit(EXIT_FAILURE); } while (1) { // 向服务器发送数据 printf("Client: "); fgets(buffer, MAX_BUFFER_SIZE, stdin); sendto(client_fd, buffer, strlen(buffer), MSG_CONFIRM, (const struct sockaddr *)&server_addr, sizeof(server_addr)); // 从服务器接收数据 recv_len = recvfrom(client_fd, buffer, MAX_BUFFER_SIZE, MSG_WAITALL, NULL, NULL); buffer[recv_len] = '\0'; printf("Server: %s\n", buffer); } close(client_fd); return 0; }

相关推荐

最新推荐

recommend-type

C语言编写基于TCP和UDP协议的Socket通信程序示例

主要介绍了C语言编写基于TCP和UDP协议的Socket通信程序示例,其中TCP的客户端与服务器端采用多线程实现,需要的朋友可以参考下
recommend-type

Linux中使用C语言的fork()函数创建子进程的实例教程

fork是一个在Linux系统环境下专有的函数,现有的进程调用fork后将会创建一个新的进程,这里我们就来看一下Linux中使用C语言的fork()函数创建子进程的实例教程
recommend-type

c语言实现udp通信程序

讲述了UDP程序的实现方法,并用C语言编程实现了一个UDP程序,该程序能实现广播功能和多播功能,能进行广播消息和多播消息的接发。通过本章的分析,想读者展示了UDP程序的实现过程,广播和多播的区别与共同点
recommend-type

C语言用UDP 实现局域网聊天程序源码

C语言用UDP实现局域网聊天程序源码,能够实现用户的注册,登陆,群发和私聊的功能。
recommend-type

C++获取特定进程CPU使用率的实现代码

写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。