linux IPC之socket解析及实例代码
发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,Linux下的Socket通信是一种基于文件的IPC通信,也可以是基于其他设备的IPC通信。它可以在本机内不同进程间实现通信,也可以在实现不同主机之间的通信。socket的创建步骤服务端1.通过soc
千家信息网最后更新 2024年10月24日linux IPC之socket解析及实例代码
Linux下的Socket通信是一种基于文件的IPC通信,也可以是基于其他设备的IPC通信。它可以在本机内不同进程间实现通信,也可以在实现不同主机之间的通信。
socket的创建步骤
服务端
1.通过socket()函数创建socket
2.通过bind函数绑定socket于设备地址
3.通过listen监听指定的socket
4.通过accept等待客户端的连接
客户端
1.通过socket()函数创建socket
2.通过connect连接到服务端
待经过上面的步骤后,服务端和客户端已经建立了链接,可以通过write/read或者sendto/recvfrom发送/接收数据.
示列
1.服务端
//s_unix.c#include#include #include #include #define UNIX_DOMAIN "/tmp/UNIX.domain"int main(void){ socklen_t clt_addr_len; int listen_fd; int com_fd; int ret; int i; static char recv_buf[1024]; int len; struct sockaddr_un clt_addr; struct sockaddr_un srv_addr; listen_fd=socket(PF_UNIX,SOCK_STREAM,0); if(listen_fd<0) { perror("cannot create communication socket"); return 1; } //set server addr_param srv_addr.sun_family=AF_UNIX; strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1); unlink(UNIX_DOMAIN); //bind sockfd & addr ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr)); if(ret==-1) { perror("cannot bind server socket"); close(listen_fd); unlink(UNIX_DOMAIN); return 1; } //listen sockfd ret=listen(listen_fd,1); if(ret==-1) { perror("cannot listen the client connect request"); close(listen_fd); unlink(UNIX_DOMAIN); return 1; } //have connect request use accept len=sizeof(clt_addr); com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len); if(com_fd<0) { perror("cannot accept client connect request"); close(listen_fd); unlink(UNIX_DOMAIN); return 1; } //read and printf sent client info printf("/n=====info=====/n"); for(i=0;i<4;i++) { memset(recv_buf,0,1024); int num=read(com_fd,recv_buf,sizeof(recv_buf)); printf("Message from client (%d)) :%s/n",num,recv_buf); } close(com_fd); close(listen_fd); unlink(UNIX_DOMAIN); return 0;}
2.客户端
//c_unix.c#include#include #include #include #define UNIX_DOMAIN "/tmp/UNIX.domain"int main(void){ int connect_fd; int ret; char snd_buf[1024]; int i; static struct sockaddr_un srv_addr;//creat unix socket connect_fd=socket(PF_UNIX,SOCK_STREAM,0); if(connect_fd<0) { perror("cannot create communication socket"); return 1; } srv_addr.sun_family=AF_UNIX; strcpy(srv_addr.sun_path,UNIX_DOMAIN);//connect server ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr)); if(ret==-1) { perror("cannot connect to the server"); close(connect_fd); return 1; } memset(snd_buf,0,1024); strcpy(snd_buf,"message from client");//send info server for(i=0;i<4;i++) write(connect_fd,snd_buf,sizeof(snd_buf)); close(connect_fd); return 0;}
总结
以上就是本文关于linux IPC之socket解析及实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
通信
客户
服务
函数
客户端
不同
朋友
步骤
设备
代码
实例
专题
主机
之间
兴趣
内容
可以通过
地址
就是
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数码数据库
oracal 数据库教材
互联网科技公司如何谈薪
安卓手机定位软件开发背景
qt数据库分页查询实现
向数据库写数据类型
ftp服务器 中文
盘锦网络技术公司
软件开发需要分析的工具
r语言连接数据库
山东光峰互联网科技有限公司
开展宣传网络安全活动的意义
华为服务器的防火墙在哪里
设置开启健康数据库
好玩我的世界服务器
中经网是实时数据库吗
幻影互联网络科技工作室
云服务器租用平台感悟
北京推广网络技术要多少钱
索尼摄像机中修复图像数据库
武林闲侠蜀山服务器
魔兽世界转移服务器换种族
推动涉农信用信息数据库
服务器都有什么系统
如何看代码运行的服务器
网络安全管理基础工作
无线网络技术及应用案例
信息系统与数据库是什么
无锡智慧医院软件开发
雅鸽网络技术