首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言 Socket 實戰:AF_UNIX 資料報(Datagram)通訊

     編輯:關於C

本地資料報 Socket

AF_UNIX 僅限同主機進程通訊,比 AF_INET 省去網路協議棧開銷,延遲更低。

伺服器端

int sfd = socket(AF_UNIX, SOCK_DGRAM, 0);

struct sockaddr_un srv_addr = {0};
srv_addr.sun_family = AF_UNIX;
strncpy(srv_addr.sun_path, SOCKET_PATH, sizeof(srv_addr.sun_path)-1);
unlink(SOCKET_PATH);                 // 確保路徑不存在
bind(sfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));

struct sockaddr_un cli_addr;
socklen_t len = sizeof(cli_addr);
char buf[128];
recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cli_addr, &len);
printf("[server] received: %s\n", buf);

close(sfd);
unlink(SOCKET_PATH);

客戶端

int cfd = socket(AF_UNIX, SOCK_DGRAM, 0);

struct sockaddr_un srv_addr = {0};
srv_addr.sun_family = AF_UNIX;
strncpy(srv_addr.sun_path, SOCKET_PATH, sizeof(srv_addr.sun_path)-1);

char buf[] = "hello";
sendto(cfd, buf, sizeof(buf), 0, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
printf("[client] sent: %s\n", buf);

close(cfd);

編譯與執行

gcc server.c -o server
gcc client.c -o client
./server &
./client

輸出範例

[client] sending data (hello ) to server by socket
[server] receiving data (hello) from client by socket

注意:SOCKET_PATH 需雙方一致;伺服器需先 unlink 避免 bind 失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved