当套接字用于本地通信时,可以使用结构体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相关推荐

  1. Domain Socket本地进程间通信

    socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机 制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过 lo ...

  2. Linux之本地进程间Socket通信

    文章目录 一.Sokcet 二.Sokcet API (一).sockaddr 结构: (二).struct socketaddr_in : (三).Struct socketaddr_un (四). ...

  3. Socket编程(C语言实现)—— AF_INET(典型的TCP/IP四层模型的通信过程),AF_UNIX(本地进程间通信)

    1.AF_INET域与Socket通信 其是典型的TCP/IP四层模型的通信过程. (1)接收方与发送方依赖IP和port来标识,即,将本地socket绑定到对应的IP端口上: (2)发送数据时指定对 ...

  4. 本地进程间通信(二)--套接字socket

    目录 一.什么是Socket? 二.socket通信流程 Server端 一.创建socket 二.命名socket. 三.绑定 四.监听 五.关闭 Client端 一.创建socket 二.conn ...

  5. Linux Socket网络编程UDP、TCP 阻塞与非阻塞 断线重连机制

    三种非阻塞模式的方法: (1) fcntl函数 int Mode = fcntl(sockfd, F_GETFL, 0);       //获取文件的Mode值     fcntl(sockfd, F ...

  6. linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国

    原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...

  7. python共享内存通信mapofview_python map eval strPython socket模块实现的udp通信功能示例...

    本文实例讲述了Python socket模块实现的udp通信功能.分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要 ...

  8. Linux Socket编程

    IP socket 是在其上建立高级Internet 协议的最低级的层:从HTTP到SSL到POP3到Kerberos再到UDP-Time,每种Internet协议都建立在它的基础上.为了实现自定义的 ...

  9. Linux Socket编程入门——浅显易懂

    文章目录 1. 概述 2. Socket 3. 网络字节序 4. sockaddr 数据结构 5. 网络套接字API函数  5.1 socket()  5.2 bind()  5.3 listen() ...

最新文章

  1. 五条强化 SSH 安全的建议
  2. HDU 5861 Road 线段树区间更新单点查询
  3. Android:如何使用addJavaScriptInterface
  4. 模式识别,计算机视觉,计算机图形学,智能控制,信号处理,语音识别,知识处理,机器学习,数据挖掘领域区别
  5. html表格固定行高_Excel表格向Word复制不变形,Word表格向Excel复制不变形,一次全掌握。...
  6. 第三四五章(PTA复习)
  7. 利用反射,批量启动WCF服务
  8. java 多行文本框_Swing常用组件之多行文本区JTextArea
  9. 一步步实现SDDC-部署VC后的配置
  10. yyuc php,yyuc 开发手册.zip 框架 说明指南 Windows Develop 238万源代码下载- www.pudn.com...
  11. 协同过滤推荐算法总结(转载)
  12. 为啥显示器用RGB而打印机用CMYK
  13. 记学习量化投资 企业估值
  14. 移动IM应用正在侵蚀社交网络
  15. Gradually Vanishing Bridge for Adversarial Domain Adaptation
  16. mx550和锐炬xe显卡差距大 锐炬xe显卡和mx550区别哪个好
  17. 猿如意|程序员的如意神器之【chat GPT】测评。
  18. 啥?Grafana 还能为日志添加告警?
  19. 星座图中格雷映射及其实现
  20. 用go来搭建一个简单的图片上传网站

热门文章

  1. 使用HttpHandler实现图片防盗链
  2. 英语单词 factor cull
  3. js学习(4) 函数
  4. OpenStack Pike Minimal安装:二、身份认证
  5. 【小松教你手游开发】【unity实用技能】计算目标物体是否在自己的扇形视野范围...
  6. Kosaraju 算法查找强连通分支
  7. 《中国人工智能学会通讯》——2.2 智能汽车人机交互与人机协同技术
  8. 记一次vue2路由参数传递this指针问题
  9. JQuery全选/反选设置
  10. 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理