国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > 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解析及實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双峰县| 兴国县| 吉木乃县| 濉溪县| 祥云县| 鄂托克旗| 壶关县| 神池县| 攀枝花市| 宣恩县| 蕉岭县| 四川省| 普定县| 邢台县| 和田县| 达日县| 遵义县| 蛟河市| 花莲县| 明星| 惠东县| 山丹县| 托克逊县| 宝鸡市| 东源县| 武功县| 遵义县| 潮安县| 丹江口市| 个旧市| 晴隆县| 武穴市| 宁武县| 柞水县| 南部县| 陈巴尔虎旗| 梧州市| 雷州市| 安塞县| 仁寿县| 孟州市|