麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Linux服務器 > 正文

linux IPC之socket解析及實例代碼

2024-09-05 23:04:35
字體:
來源:轉載
供稿:網友

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 <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h> #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 <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#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/202003.html">linux/202019.html">linux IPC之socket解析及實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲天堂ww | 日韩视频在线视频 | 逼片| 亚洲欧美不卡视频 | 91精品国产综合久久久欧美 | 一级做a爰片性色毛片2021 | 97久久日一线二线三线 | 成年免费观看视频 | 一级外国毛片 | 国产精品视频一区二区三区综合 | 久久www视频| 免费一级片观看 | 黄色av免费 | 国产精品午夜小视频观看 | 色综合久久久久久久粉嫩 | ⅴideo裸体秀hd| 少妇的肉体的满足毛片 | 国产做爰全免费的视频黑人 | 精品一区二区三区中文字幕老牛 | 国产在线精品91 | 久久国产精品久久久久久电车 | 欧美精品一区二区三区四区 | 伊人久久国产精品 | 欧美日韩免费一区二区三区 | 国产一级淫片a级aaa | 宅男噜噜噜66一区二区 | 黄色成人短视频 | 亚洲精品有限 | 国产资源在线观看 | 国产小视频在线 | 亚洲国产精品久久久久久久 | xxx18hd18hd日本 | 毛片免费在线观看 | 亚洲视频观看 | 羞羞视频免费网站男男 | 操碰 | 啊~用cao嗯力cao烂我视频 | av色在线观看 | 久夜草| 久久日本 | 欧美日韩在线影院 |