千家信息网

linux IPC之socket解析及实例代码

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,Linux下的Socket通信是一种基于文件的IPC通信,也可以是基于其他设备的IPC通信。它可以在本机内不同进程间实现通信,也可以在实现不同主机之间的通信。socket的创建步骤服务端1.通过soc
千家信息网最后更新 2025年02月04日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安全错误 数据库的锁怎样保障安全 access数据库设计操作 个人服务器可以打游戏吗 工业软件开发的难点在哪里 熟悉的网络技术和应用 魔域数据库问题教程 光明区品质网络技术开发咨询报价 龙海区公安局网络安全监检大队 成都商机网络技术有限公司印章 北京密云新建快手数据库 镇江服务器工控机系统 软件开发流程ui 什么是网络安全法的国内建设 炎农互联网科技 服务器区域市场开拓思路及方案 计算机网络技术试卷a 学软件开发项目的优点 花都区软件开发价格 正规网络技术专业服务 影响数据库系统安全性的因素 网络安全与日常工作结合 网络安全方面英语论文 软件开发营业模式和营销策略 校园网络安全发展历史 保证网络安全哪些措施 网络安全教育公共频道 合肥几度互联网络科技 张微孟秦网络技术 网络安全产品文案励志 机架服务器图标 卖云服务器注册执照类目怎么填
0