本地套接字

文件格式

  • 管道文件: P
    ls -l 第一個字符爲P, 那麼爲管道文件
  • 套接字:S
    • 僞文件,不存在磁盤,在內核緩衝區內

有名管道用於沒有血緣關係進程間通信

進程A管道P進程Bopen()管道位於內核緩衝區open()進程A管道P進程B

利用本地套接字建立進程間通信

sockaddr_un paramter
sun_family AF_UNIX
char path[108] “server.sock”

Sever

//Server
//創建本地套接字文件
int lfd=socket(AF_LOCAL, sock_stream, 0); //AF_LOCAL本地套接字
//如果套接字文件存在,刪除套接字文件
unlink("serv.socket");
//綁定-struct sockaddr_un------------------------------------
struct sockaddr_un serv;
serv.sun_family = AF_LOCAL;'
strncpy(serv.sun_path, "server.socket"); //當前還不存在
bind(lfd, (struct sockaddr &)*serv, len); //綁定成功後,server.socket在當前文件夾下創建OK
//設置監聽
listen(lfd,36);
//等待接收請求
struct sockaddr client;
int len = sizeof(client);
int cfd = accept(lfd, &client, &len);
printf("client bind file:%s", client.sun_path); //打印客戶端綁定的文件
//通信
send()
recv()
//斷開連接誒
close(fd);close(lfd);

Client

//Server
//創建本地套接字文件
int fd=socket(AF_LOCAL, sock_stream, 0); //AF_LOCAL本地套接字
//如果套接字文件存在,刪除套接字文件
unlink("client.socket");
//綁定套接字文件
struct sockaddr_un client;
client.sun_family = AF_LOCAL;'
strncpy(client.sun_path, "client.socket"); //當前還不存在
bind(fd, (struct sockaddr &)*client, len); //綁定成功
//連接服務器
struct sockaddr_un serv;
serv.sun_family = af_local;
strcpy(serv.sun_path, "server.socket"); //綁定之前創建的server.socket文件
connet(fd,&serv,sizeof(serv));
//通信
send()
recv()
//斷開連接誒
close(fd);close(lfd);
server.socket client.socket
server操作 client操作
內核server緩衝區 內核client緩衝區

本地套接字實際是對映射到內核空間緩衝區的文件描述符的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章