IPC——数据报套接字通信
Linux进程间通信——使用数据报套接字
int socket(int domain, int type, int protocol);
int bind( int socket, const struct sockaddr *address, size_t address_len);
int sendto(int sockfd, void *buffer, size_t len, int flags, struct sockaddr *to, socklen_t tolen);
int recvfrom(int sockfd, void *buffer, size_t len,int flags, struct sockaddr *src_from, socklen_t *src_len);
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h> int main()
{
int server_sockfd = -;
int server_len = ;
int client_len = ;
char buffer[];
int result = ;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
//创建数据报套接字
server_sockfd = socket(AF_INET, SOCK_DGRAM, );
//设置监听IP端口
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons();
server_len = sizeof(server_addr);
//绑定(命名)套接字
bind(server_sockfd, (struct sockaddr*)&server_addr, server_len);
//忽略子进程停止或退出信号
signal(SIGCHLD, SIG_IGN); while()
{
//接收数据,用client_addr来储存数据来源程序的IP端口
result = recvfrom(server_sockfd, buffer, sizeof(buffer), ,
(struct sockaddr*)&client_addr, &client_len);
if(fork() == )
{
//利用子进程来处理数据
buffer[] += 'a' - 'A';
sleep();
//发送处理后的数据
sendto(server_sockfd, buffer, sizeof(buffer), ,
(struct sockaddr*)&client_addr, client_len);
printf("%c\n", buffer[]);
//注意,一定要关闭子进程,否则程序运行会不正常
exit();
}
}
//关闭套接字
close(server_sockfd);
}
sockclient2.c的源代码如下:
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h> int main(int agrc, char *argv[])
{
struct sockaddr_in server_addr;
int server_len = ;
int sockfd = -;
int result = ;
char c = 'A';
//取第一个参数的第一个字符
if(agrc > )
c = argv[][];
//创建数据报套接字
sockfd = socket(AF_INET, SOCK_DGRAM, );
//设置服务器IP端口
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons();
server_len = sizeof(server_addr);
//向服务器发送数据
sendto(sockfd, &c, sizeof(char), ,
(struct sockaddr*)&server_addr, server_len);
//接收服务器处理后发送过来的数据,由于不关心数据来源,所以把后两个参数设为0
recvfrom(sockfd, &c, sizeof(char), , , );
printf("char from server = %c\n", c);
//关闭套接字
close(sockfd);
exit();
}


IPC——数据报套接字通信的更多相关文章
- IPC——流套接字通信
Linux进程间通信——使用流套接字 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进 ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级 ...
- Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()
前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...
- 网络IPC:套接字之数据传输
既然将套接字端点表示为文件描述符,那么只要建立连接,就可以使用read和write来通过套接字通信.通过在connect函数里设置对方地址,数据报套接字也可以“连接”.在套接字描述符上采用read和w ...
- 网络IPC:套接字之套接字描述符
套接字是通信端点的抽象.与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符.套接字描述符在UNIX系统是用文件描述符实现的.事实上,许多处理文件描述符的函数(如read和write) ...
- Linux进程间通信——使用数据报套接字
前一篇文章, Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报 ...
- UNIX环境高级编程 第16章 网络IPC:套接字
上一章(15章)中介绍了UNIX系统所提供的多种经典进程间通信机制(IPC):管道PIPE.命名管道FIFO.消息队列Message Queue.信号量Semaphore.共享内存Shared Mem ...
- Linux 进程间通信(二)(网络IPC:套接字)
socket描述符 套接字是通信端点的抽象,创建一个套接字使用如下函数: #include <sys/socket.h> int socket(int domain, int type, ...
随机推荐
- 拜托,这才是“Uber”的正确读法
在美国,私家车主可以注册成为Uber司机,这对传统的出租车行业形成了很大的挑战,同时也让Uber始终处于舆论的风口浪尖. 7月14日,美国用车应用Uber正式宣布进入北京市场.在进入中国后,Uber选 ...
- Maven默认周期与插件
运行 cmd mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId= ...
- pybombs 安装
参考:https://github.com/gnuradio/pybombs 先装:pip 然后: pip install PyBOMBS 更新源: pybombs recipes add gr-re ...
- 分布式文件系统--GFS
分布式文件系统 分布式文件系统:当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区(partition)并存储到若干台单独的计算机上.管理网络中夸多台计算机存储的文件系统.这种系统 ...
- 关于dom节点绑定滑动事件导致浏览器上下滑动失效解决方案--黄丕巧
1.移动端开发往往需要添加一下自定义的左右滑动事件,但是添加了左右滑动事件之后就要阻止浏览器大默认事件,否则dom节点的滑动事件和浏览器本身的滑动会出现冲突,导致滑动的时候会出现消失瞬间再出现的效果 ...
- oracle查看相关用户表
select TABLE_NAME from user_tables //当前用户表 select TABLE_NAME from dba_tables //所有用户表+系统表 select TA ...
- 关于javascript里面仿python切片操作数组的使用方法
其实在使用了好一段时间的 python之后,我觉得最让我念念不忘的并不是python每次在写函数或者循环的时候可以少用{}括号这样的东西(ps:其实也是了..感觉很清爽,而且又开始写js的时候老是想用 ...
- 第三百二十一天 how can I 坚持
上班第一天,感觉时间过得好慢. 心里好烦,做什么都没心情,感觉没有勇气了,虽然早上说了那么多,但不敢去面对了. 咋整? <猪老三><野子>. 好想去看<美人鱼> 不 ...
- SQL SERVER安装提示“安装了 Microsoft Visual Studio 2008 的早期版本
工作共遇到的问题记录: 安装Sql Server 2008 R2时提示错误:“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Server 2 ...
- WebRTC源码分析:音频模块结构分析
一.概要介绍WebRTC的音频处理流程,见下图: webRTC将音频会话抽象为一个通道Channel,譬如A与B进行音频通话,则A需要建立一个Channel与B进行音频数据传输.上图中有三个Chann ...