关于使用UDP套接字进行本地进程通信
来源:互联网 发布:淘宝企业开店店铺名称 编辑:程序博客网 时间:2024/06/04 19:30
1、linux中进程间的通信可以使用套接字的方式
2、套接字的方式即将套接字的目的地设为“127.0.0.1:port”。以发包的形式将数据传输到本地的某个进程
3、套接字的方式可以选择UDP也可以选择TCP。UDP是不可靠连接,包头中只有源端口,目的端口,UDP长度以及UDP的校验和。传输层协议的校验和是需要对整个数据包进行校验的,具体可以查阅UDP协议和TCP协议头部的解释。
4、另外在<<TCP/IP详解 卷二:实现>>中文版P606页图23-3中,给出了接收缓存的默认大小是41600字节。那么说明一个问题:因为我们知道UDP协议只是尽可能的将数据报发送到目的地,没有重传机制。所以如果发送进程的发送速度太快,使得接收缓存没有能够及时腾出新的空间给新到的数据包,就会导致丢失数据。如果是这样的话,使用UDP套接字似乎不能够完成进程间的通信。
5、不过,还是需要实验证明:
实验设计:使用UDP套接字,本地的一个发送数据的进程将一个文件(srcFile)传输到本地的另一个接收进程。接收进程收到数据之后将其写入到另外一个文件(dstFile)中。比较这两个文件的大小
实验环境:一台4核的笔记本,内存大小为8G。原始文件(srcFile)的大小:4.18GB
实验结果:dstFile的大小为:3.17GB。可见使用UDP方式完成进程间通信,有可能会导致数据的丢失。
实验所用源码如下:(UDP套接字编写的一组简单的收发数据的进程)
接收进程:
#include
#include
#include
#include
#include
#include
int port = 9870;
void main(){
int socket_ser;
char buf[1024];
struct sockaddr_in address;
bzero(&address, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY); //INADDR_ANY代表
address.sin_port = htons(port);
socket_ser = socket(AF_INET, SOCK_DGRAM, 0);
bind(socket_ser, (struct sockaddr*)&address, sizeof(address));
FILE *fd = fopen("/dstFile", "wb");
int num = 0;
int add_len = sizeof(address);
while(1){
}
fclose(fd);
close(socket_ser);
return ;
}
发送进程:
#include
#include
#include
#include
#include
#include
int port = 9870;
void main(){
int socket_cli;
char buf[1024];
struct sockaddr_in address;
bzero(&address, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(port);
socket_cli = socket(AF_INET, SOCK_DGRAM, 0);
FILE *fd = fopen("/srcFile", "rb");
int n = 0;
while((n = fread(buf, sizeof(char), 1024, fd)) >= 0){
}
fclose(fd);
close(socket_cli);
return ;
}
- 关于使用UDP套接字进行本地进程通信
- 关于使用UDP套接字进行本地进程间…
- 本地套接字通信
- 简单的,使用套接字进行TCP通信(使用进程实现并发)。
- 进程通信————本地套接字
- Linux 进程通信——本地套接字(1)
- Linux 进程通信——本地套接字(2)
- Linux 进程通信——本地套接字(2)
- Linux 进程通信——本地套接字(1)
- 进程间通信IPC之本地套接字
- 基于套接字实现本地进程间的通信
- 计算机网络:UDP套接字通信
- 使用UDP套接字实现简单的通信
- php 本地套接字通信
- 本地套接字domain通信
- C#使用匿名管道在本地进程之间进行通信
- linux 系统下使用socket进行本地进程间通信
- linux下用udp进行本地通信
- JAVA 线程池使用
- Java杂谈三之判断素数以及穷举素数
- jQuery_review之table中根据行选中,进行背景变色和radio选中
- UDP
- getch getche getchar的区别和缓冲区的概念
- 关于使用UDP套接字进行本地进程通信
- 假期算法学习
- 同过apache-commons-id.jar生成32为主键id
- rdryfyuguiygiuti
- ZOJ 1649 Rescue
- 从计算机复试看中国教育——一个面试官的经历
- new delete问题
- java 泛型上下限的例子
- cache策略实现的原理(200、304返回码含义)