14----基于socket文件的IPC
2014-09-05 20:24
267 查看
一:两种模型:
对等模型
C/S模型
补充(来自网上对两种通信协议的理解):
二: 对等模型 ------------一般采用UDP通信方式
![](https://img-blog.csdn.net/20140908092224636)
优点:通信简单
缺点: 多个用户通信时多有不变。
1. 建立socket
int socket(int domain, // 协议族类型 AF_UNIX, AF_INET
int type, /// 支持数据格式:流SOCK_STREAM / 报文 SOCK_DGRAM
int protocol);// 支持的协议,建议为0
返回值:
成功: 返回文件描述符
失败: 返回-1
2. 绑定在地址上
int bind(int sockfd, /// socket描述符
const struct sockaddr *addr,/// 绑定地址
socklen_t addrlen);
3. 接收数据
read/write send/recv sendto/recvfrom
4. 关闭socket
/// socketA.c
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/un.h>
main()
{
int fd;
int r;
char buf[200];
//1.建立socket
fd=socket(AF_UNIX,SOCK_DGRAM,0);
if(fd==-1) printf("socket err:%m\n"),exit(-1);
printf("socket成功!\n");
//2.构造本地文件地址
struct sockaddr_un addr={0};
addr.sun_family=AF_UNIX;
memcpy(addr.sun_path,"my.sock",
strlen("my.sock"));
//3.把socket绑定在地址上
r=bind(fd,(struct sockaddr*)&addr,sizeof(addr));
if(r==-1) printf("bind err:%m\n"),exit(-1);
printf("地址绑定成功!\n");
//4.接收数据
bzero(buf,sizeof(buf));
r=read(fd,buf,sizeof(buf));
buf[r]=0;
printf("%s\n",buf);
//5.关闭
close(fd);
//6.删除socket文件
unlink("my.sock");
}
对等模型
C/S模型
补充(来自网上对两种通信协议的理解):
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说, 在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才 能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理 解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据 包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要 求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么 时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就 发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经 过三次“对话”之后,主机A才向主机B正式发送数据。 UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协 议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命 令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包, 然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如, 在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包, 收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非 连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因 为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
二: 对等模型 ------------一般采用UDP通信方式
优点:通信简单
缺点: 多个用户通信时多有不变。
1. 建立socket
int socket(int domain, // 协议族类型 AF_UNIX, AF_INET
int type, /// 支持数据格式:流SOCK_STREAM / 报文 SOCK_DGRAM
int protocol);// 支持的协议,建议为0
返回值:
成功: 返回文件描述符
失败: 返回-1
2. 绑定在地址上
int bind(int sockfd, /// socket描述符
const struct sockaddr *addr,/// 绑定地址
socklen_t addrlen);
3. 接收数据
read/write send/recv sendto/recvfrom
4. 关闭socket
/// socketA.c
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/un.h>
main()
{
int fd;
int r;
char buf[200];
//1.建立socket
fd=socket(AF_UNIX,SOCK_DGRAM,0);
if(fd==-1) printf("socket err:%m\n"),exit(-1);
printf("socket成功!\n");
//2.构造本地文件地址
struct sockaddr_un addr={0};
addr.sun_family=AF_UNIX;
memcpy(addr.sun_path,"my.sock",
strlen("my.sock"));
//3.把socket绑定在地址上
r=bind(fd,(struct sockaddr*)&addr,sizeof(addr));
if(r==-1) printf("bind err:%m\n"),exit(-1);
printf("地址绑定成功!\n");
//4.接收数据
bzero(buf,sizeof(buf));
r=read(fd,buf,sizeof(buf));
buf[r]=0;
printf("%s\n",buf);
//5.关闭
close(fd);
//6.删除socket文件
unlink("my.sock");
}
//socketB.c #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <linux/un.h> #include <string.h> #include <unistd.h> main() { int fd; int r; struct sockaddr_un addr={0}; //1.建立socket fd=socket(AF_UNIX,SOCK_DGRAM,0); //fd=socket(AF_UNIX,SOCK_STREAM,0); //2.连接到指定的地址 addr.sun_family=AF_UNIX; memcpy(addr.sun_path,"my.sock", strlen("my.sock")); r=connect(fd,(struct sockaddr*)&addr, sizeof(addr)); //3.发送数据 write(fd,"自强不息,知行合一!", strlen("自强不息,知行合一!")); //read(fd,buf,100); // printf("%s\n",buf); // sleep(1); //4.关闭 close(fd); }
相关文章推荐
- linux学习---linux基于文件的IPC(匿名管道pipe,命名管道mkfifo,普通文件,socket文件)
- 索引-基于TCP_IP和Socket的网络文件传送
- 基于Socket通信的BS结构文件服务器客户端的简易程序(3)
- [毕业设计-基于android的手机网盘的设计与实现] java中文件的socket传输问题
- Android中基于Socket方式的文件上传
- 14.基于UDP协议的socket编程(1)
- Linux下基于C实现的socket简单文件上传实例
- Java基于Socket的文件传输实现方法
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
- 阐述linux IPC(两):基于socket进程间通信(下一个)
- 基于Socket通信的BS结构文件服务器客户端的简易程序(1)
- Linux c 基于socket文件的进程通信—对等模型
- Android 中 Socket 基于TCP 传输大文件
- 创建scoket文件 UNIX Domain Socket IPC
- 基于socket的简单文件传输系统
- Linux——IPC 基于文件的通信(普通文件 管道文件)
- Java网络编程实践和总结 --- 基于TCP的Socket编程之实现文件上传和下载服务
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作