基于socket文件的进程通信:
Socket文件进程通信方式,比较重要,原因:网络业采用这种通信模型。
两种模型:
对等模型
C/S模型(服务器客户端模型)
1.对等模型:
1.建立socket
#include<sys/socket.h>
1.建立socket:socket
intsocket(
int domain,//地址族的类型AF_UNIX (绑定在本地) AF_INET(绑定在网卡)
int type,//支持的数据格式:流SOCK_STREAM/报文SOCK_DGRAM
int protocol);//支持的协议,建议为0
返回值:
成功返回文件描述符号。
失败返回-1;
2.绑定在地址上(文件目录地址)URL(Universe ResourceLocation)
协议://路径/文件名
file:///usr/bin/ls普通文件
http://192.168.0.72/index.php
structsockaddr; 地址结构体
#include<linux/un.h>
structsockaddr_un; un=unix(绑定unix本地)
struct sockaddr_un{
sa_family_t sun_family;/*AF_UNIX*/
char sun_path[UNIX_PATH_MAX];
};
structsockaddr_in; in=internet(绑定网卡)
intbind(int fd,//socket描述符号
structsockaddr*addr,//绑定地址
socklen_tsize);//地址长度
返回值:0成功,-1失败
3.接收数据
read/recv/recvfrom
4.关闭socket
连接方:
1.建立socket:socket
2.连接到目标:connect(可选)
intconnect(int sockfd , const struct sockaddr * serv_addr , socklen_taddrlen);
参数:和bind一样
返回值:0成功,-1失败
3.发送数据:write/send/sendto
4.关闭close
案例:
socketA.c
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<linux/un.h>
void main()
{
intfd;
intr;
char buf[];
//1.建立socket
fd=socket(AF_UNIX , SOCK_DGRAM , 0); //AF_FILE 等同//AF_UNIX
if(fd == -1) printf(“socket error:%m\n”) , exit(-1);
//2.构造本地文件地址
struct sockaddr_unaddr={0};
addr.sun_family=AF_UNIX; //必须跟socket的地址族一致
memcpy(addr.sun_path , “my.sock”,strlen(“my.sock”));
//3.把socket绑定在地址上
r=bind(fd , (struct sockaddr *)&addr , sizeof(addr));
if(r== -1) printf(“bind error:%m\n”), exit(-1);
//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”);
//socket文件不会自动删除,需要在程序结尾去删除该文件,否则,再次运行//A程序出错
}
SocketB.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<linux/un.h>
#include<string.h>
#include<unistd.h>
void main()
{
intfd;
structsockaddr_un addr={0};
//1.建立socket
fd=socket(AF_UNIX , SOCK_DGRAM , 0);
//2.连接到指定的地址
addr.sun_family=AF_UNIX;
memcpy(addr.sun_path, “my.sock” ,strlen(“my.sock”));
r=connect(fd , (sockaddr *)&addr ,sizeof(addr));
//3.发送数据
write(fd, “hello !”,strlen(“hello!”));
//4.关闭
close(fd);
}
分享到:
相关推荐
Linux环境下基于Socket的网络通信.pdf
Linux下基于Socket的网络通信.pdf
linux C语言 socket通信聊天小程序
用java编写的基于socket的进程间通信程序 客户端服务器聊天小程序
多客户端需要从服务器下载文件,本设计基于socket通信完成的文件分发。
[]在_Linux_上实现基于Socket_的多进程实时通信
Linux下基于socket多线程并发通信的实现,论文,pdf文档
C语言基于socket多人聊天(包含注册登录),有注册和登录模块,验证通过才可以发信息。可实现多人同时在线发信息,或者一对一发信息
套接口为目前Linux上最为广泛使用的一种的进程间通信机制,与其他的Linux通信机制不同之处在于除了它可用于单机内的进程间通信以外,还可用于不同机器之间的进程间通信。但是由于Socket本身不支持同时等待和超时处理...
Linux Socket编程、Linux IO模型、Linux 进程间通信【完整用例】
主要介绍了Linux进程间通信方式之socket使用实例,具有一定参考价值,需要的朋友可以了解下。
C语言编写Socket编写进程间传文件,服务器端和客户端传文件.
Linux异步通信socket.
Linux下基于socket多线程并发通信的实现.pdf
Linux Socket进程通信的基本原理和Socket数据结构,运用Socket编写一个聊天程序,客户程序和服务程序在局域网内建立虚拟电路连接,能相互收发信息,进行通信。完整的报告、心得、源程序、流程图等
linux 下的 Socket 服务器同时与多个客户端进行文件传输, 其中客户端用 Qt 编写的, 可以在Ubuntu 和 Windows 下运行。服务器代码可以在 ubuntu 下运行, 也可以用交叉编译器编译在 ARM 下运行。命令与数据端口分开...
linux环境下基于socket通信的ftp系统的客户端和服务器端的源代码
本程序实现了以server为主的并发服务器,可以同时和多个客户端聊天,并且支持文件传输的功能
linux socket、驱动、进程编程 linux socket、驱动、进程编程 linux socket、驱动、进程编程 linux socket、驱动、进程编程
Linux下Socket 多进程多客户端通信,如果系统消息队列过多可以执行x.sh清空消息队列