Linux socket本地进程间通信之UDP
当套接字用于本地通信时,可以使用结构体struct sockaddr_un描述一个本地地址。
1 struct sockaddr_un{ 2 unsigned short sun_family; /*协议类型*/ 3 char sun_path[108]; /*套接字文件路径*/ 4 };
在本地通信中,每个套接字文件代表一个本地地址。
UNIX域用户数据报套接字服务器端流程如下:
(1)创建UNIX域数据报套接字;socket(AF_LOCAL, SOCK_DGRAM, 0)
(2)填充本地信息结构体(服务器);struct sockaddr_un
(3)绑定本地地址(服务器的地址信息);bind( )
(4)接收客户端的数据;recvfrom( )
(5)发送数据给客户端;sendto( )
服务器端代码如下:
server.c
1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<unistd.h> 4 #include<sys/socket.h> 5 #include<arpa/inet.h> 6 #include<netinet/in.h> 7 #include<string.h> 8 #include<sys/un.h> 9 #include<stdlib.h> 10 11 #define N 64 12 13 int main(int argc, const char *argv[]) 14 { 15 int sockfd; 16 struct sockaddr_un serveraddr, clientaddr; 17 char buf[N]; 18 socklen_t len = sizeof(clientaddr); 19 20 sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0); 21 if(sockfd < 0) 22 { 23 perror("fail to sockfd"); 24 return -1; 25 } 26 27 serveraddr.sun_family = AF_LOCAL; 28 strcpy(serveraddr.sun_path, "mysocket"); 29 30 if(bind(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0) 31 { 32 perror("fail to bind"); 33 return -1; 34 } 35 36 while(1) 37 { 38 if(recvfrom(sockfd, buf, N, 0, (struct sockaddr*)&clientaddr, &len) < 0) 39 { 40 perror("fail to recvfrom"); 41 return -1; 42 } 43 if(strncmp(buf, "quit", 4) == 0) 44 { 45 break; 46 } 47 buf[strlen(buf) - 1] = '\0'; 48 printf("buf:%s\n", buf); 49 strcat(buf, "++++----"); 50 if(sendto(sockfd, buf, N, 0, (struct sockaddr*)&clientaddr, sizeof(clientaddr)) < 0) 51 { 52 perror("fail to sendto"); 53 return -1; 54 } 55 } 56 close(sockfd); 57 return 0; 58 }
UNIX域用户数据报套接字客户端流程如下:
(1)创建UNIX域数据报套接字;socket(AF_LOCAL, SOCK_DGRAM, 0)
(2)填充本地信息结构体(服务器端和客户端);struct sockaddr_un
(3)绑定本地地址(客户端的地址信息);bind( )
(4)发送数据给服务器端;sendto( )
(5)接收服务器端的数据;recvfrom( )
客户端代码如下:
client.c
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<sys/types.h> 4 #include<unistd.h> 5 #include<sys/socket.h> 6 #include<arpa/inet.h> 7 #include<netinet/in.h> 8 #include<sys/un.h> 9 #include<string.h> 10 11 #define N 64 12 13 int main(int argc, const char *argv[]) 14 { 15 int sockfd; 16 char buf[N]; 17 struct sockaddr_un serveraddr, clientaddr; 18 19 sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0); 20 if(sockfd < 0) 21 { 22 perror("fail to sockfd"); 23 return -1; 24 } 25 26 serveraddr.sun_family = AF_LOCAL; 27 strcpy(serveraddr.sun_path, "mysocket"); 28 29 clientaddr.sun_family = AF_LOCAL; 30 strcpy(clientaddr.sun_path, "socket"); 31 32 if(bind(sockfd, (struct sockaddr*)&clientaddr, sizeof(clientaddr)) < 0) 33 { 34 perror("fail to bind"); 35 return -1; 36 } 37 38 while(1) 39 { 40 printf("<client>"); 41 fgets(buf, N, stdin); 42 if(sendto(sockfd, buf, N, 0, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0) 43 { 44 perror("fail to sendto"); 45 return -1; 46 } 47 if(strncmp(buf, "quit", 4) == 0) 48 { 49 break; 50 } 51 if(recvfrom(sockfd, buf, N, 0, NULL, NULL) < 0) 52 { 53 perror("fail to recvfrom"); 54 return -1; 55 } 56 printf("buf:%s\n", buf); 57 } 58 close(sockfd); 59 60 return 0; 61 }
客户端运行结果如下:
服务器端运行结果如下:
转载于:https://www.cnblogs.com/yangziwen0709/p/5024697.html
Linux socket本地进程间通信之UDP相关推荐
- Domain Socket本地进程间通信
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机 制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过 lo ...
- Linux之本地进程间Socket通信
文章目录 一.Sokcet 二.Sokcet API (一).sockaddr 结构: (二).struct socketaddr_in : (三).Struct socketaddr_un (四). ...
- Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)
1.AF_INET域与Socket通信 其是典型的TCP/IP四层模型的通信过程. (1)接收方与发送方依赖IP和port来标识,即,将本地socket绑定到对应的IP端口上: (2)发送数据时指定对 ...
- 本地进程间通信(二)--套接字socket
目录 一.什么是Socket? 二.socket通信流程 Server端 一.创建socket 二.命名socket. 三.绑定 四.监听 五.关闭 Client端 一.创建socket 二.conn ...
- Linux Socket网络编程UDP、TCP 阻塞与非阻塞 断线重连机制
三种非阻塞模式的方法: (1) fcntl函数 int Mode = fcntl(sockfd, F_GETFL, 0); //获取文件的Mode值 fcntl(sockfd, F ...
- linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国
原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...
- python共享内存通信mapofview_python map eval strPython socket模块实现的udp通信功能示例...
本文实例讲述了Python socket模块实现的udp通信功能.分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要 ...
- Linux Socket编程
IP socket 是在其上建立高级Internet 协议的最低级的层:从HTTP到SSL到POP3到Kerberos再到UDP-Time,每种Internet协议都建立在它的基础上.为了实现自定义的 ...
- Linux Socket编程入门——浅显易懂
文章目录 1. 概述 2. Socket 3. 网络字节序 4. sockaddr 数据结构 5. 网络套接字API函数 5.1 socket() 5.2 bind() 5.3 listen() ...
最新文章
- 五条强化 SSH 安全的建议
- HDU 5861 Road 线段树区间更新单点查询
- Android:如何使用addJavaScriptInterface
- 模式识别,计算机视觉,计算机图形学,智能控制,信号处理,语音识别,知识处理,机器学习,数据挖掘领域区别
- html表格固定行高_Excel表格向Word复制不变形,Word表格向Excel复制不变形,一次全掌握。...
- 第三四五章(PTA复习)
- 利用反射,批量启动WCF服务
- java 多行文本框_Swing常用组件之多行文本区JTextArea
- 一步步实现SDDC-部署VC后的配置
- yyuc php,yyuc 开发手册.zip 框架 说明指南 Windows Develop 238万源代码下载- www.pudn.com...
- 协同过滤推荐算法总结(转载)
- 为啥显示器用RGB而打印机用CMYK
- 记学习量化投资 企业估值
- 移动IM应用正在侵蚀社交网络
- Gradually Vanishing Bridge for Adversarial Domain Adaptation
- mx550和锐炬xe显卡差距大 锐炬xe显卡和mx550区别哪个好
- 猿如意|程序员的如意神器之【chat GPT】测评。
- 啥?Grafana 还能为日志添加告警?
- 星座图中格雷映射及其实现
- 用go来搭建一个简单的图片上传网站