linux簡單程序間socket通訊

2021-07-05 11:30:11 字數 2316 閱讀 9851

socket多用於網路通訊,但將服務位址設為本機位址之後,即可實現本機程序間socket通訊,利用socket可以在程序間方便地傳輸資料。

在linux平台上還支援af_unix通訊,而不必設定本機位址,這種socket通訊型別在windows平台上並不適用。

下面模擬三個程序間利用socket通訊,server程序負責接收客戶端程序1和2的通訊請求並且將通訊內容轉交給對端。對於server端利用兩個執行緒分別接收兩個客戶端的連線請求,並且開了兩個socket,這種方式只是簡單的模擬實現,是效率低下的一種方式。示例**如下:

服務程序server

#include #include #include #include #include #include #include #include //for memset

#include #include #include // 設定埠號

#define rpc_port_csdk 6666

#define rpc_port_ui 6665

#define buff_size 1024

#define log_file "daemon.log"

char recv_ui[buff_size];

char recv_csdk[buff_size];

// 通過可變引數寫日誌檔案

void writelog(const char* format, ...)

void recvmessage(int fd, char* buf)

ret = recv(fd, buf, buff_size, 0);

buf[ret] = '\0';

if(ret > 0) }

void sendmessage(int fd, const char* towhom)

else if(towhom == "ui")

else

}else if(towhom == "csdk")

else

}}void initdaemon(void)

// 設定服務端位址及埠

memset(&serveraddr, 0, sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_addr.s_addr = htonl(inaddr_any); // inaddr_any--自動查詢本機位址

serveraddr.sin_port = htons(rpc_port);

ret = connect(clientfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));

if( ret < 0)

char sendbuf[buff_size] = "hello, i am ui";

char recvbuf[buff_size];

memset(recvbuf, 0, buff_size);

while(1)

return 0;

}

客戶程序2 process2

#include #include #include #include #include #include #include #include //for memset

#include #include // 設定埠號

#define rpc_port 6666

#define buff_size 1024

int main(void)

// 設定服務端位址及埠

memset(&serveraddr, 0, sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_addr.s_addr = htonl(inaddr_any); // inaddr_any--自動查詢本機位址

serveraddr.sin_port = htons(rpc_port);

ret = connect(clientfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));

if( ret < 0)

char sendbuf[buff_size] = "hello, i am csdk";

char recvbuf[buff_size];

memset(recvbuf, 0, buff_size);

while(1)

return 0;

}

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...