程序間通訊 使用socket實現

2021-10-16 17:11:36 字數 3302 閱讀 2269

socket套接字通訊,建立兩個程序交流:

第乙個程序叫做jack,他想給rose打**,於是他先要去買乙個手機(建立socket),並且還要知道rose的**號碼(對方ip和埠)

jack(客戶端):

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int sockfd;

//設定為全域性變數

void

*routine

(void

*arg)

;while(1

)}intmain()

//對自己的結構體進行配置

struct sockaddr_in cli_addr;

bzero

(&cli_addr,

sizeof

(cli_addr));

cli_addr.sin_family=af_inet;

cli_addr.sin_port=

htons

(8000);

//自己的

cli_addr.sin_addr.s_addr=

inet_addr

("0.0.0.0");

//自己的

//2.繫結自己的ip位址和埠號(繫結乙個號碼)

int ret=

bind

(sockfd,

(struct sockaddr *

)&cli_addr,

sizeof

(cli_addr));

if(ret==-1

)//對服務端的結構體進行配置

struct sockaddr_in ser_addr;

bzero

(&ser_addr,

sizeof

(ser_addr));

ser_addr.sin_family=af_inet;

ser_addr.sin_port=

htons

(8888);

//對方

ser_addr.sin_addr.s_addr=

inet_addr

("0.0.0.0");

//對方 ip設定為0.0.0.0 表示接受所有ip,可改為自己的ip

//3.連線(打**給對方)

ret=

connect

(sockfd,

(struct sockaddr *

)&ser_addr,

sizeof

(ser_addr));

if(ret==-1

)//建立乙個子執行緒用於接收rose傳送過來的內容

pthread_t pid;

pthread_create

(&pid,

null

, routine,

null);

//4.暢聊

char buf[50]

=;while(1

)//5.關閉

close

(sockfd)

;return0;

}

對rose來說,rose有了乙個手機,手機保持開機(listen監聽),想找人聊天,她在等待有人打**給她(accept 等待連線),這時她接到了jack的**,她選擇了接聽(建立連線),然後他們就快樂的通話了。

rose(服務端)的**如下:

#include

#include

#include

#include

#include

#include

#include

#include

int confd;

void

*routine

(void

*arg)

;while(1

)}intmain()

//對自己的結構體進行配置

struct sockaddr_in ser_addr;

bzero

(&ser_addr,

sizeof

(ser_addr));

ser_addr.sin_family=af_inet;

ser_addr.sin_port=

htons

(8888);

//自己的

ser_addr.sin_addr.s_addr=

inet_addr

("0.0.0.0");

//自己的

//2.繫結自己的ip位址和埠號(繫結乙個號碼)

int ret=

bind

(sockfd,

(struct sockaddr *

)&ser_addr,

sizeof

(ser_addr));

if(ret==-1

)//3.監聽(把套接字設定為監聽狀態,相當於把手機處於開機狀態)

listen

(sockfd,2)

;struct sockaddr_in cli_addr;

bzero

(&cli_addr,

sizeof

(cli_addr));

socklen_t len=

sizeof

(cli_addr)

;//4.等待連線(阻塞等待,等待對方打**過來)

confd=

accept

(sockfd,

(struct sockaddr *

)&cli_addr,

&len);if

(confd==-1

)//建立乙個子執行緒用於接收rose傳送過來的內容

pthread_t pid;

pthread_create

(&pid,

null

, routine,

null);

//5.暢聊

char buf[50]

=;while(1

)//6.關閉

close

(sockfd)

;close

(confd)

;}

注意:rose很高冷,她不會主動打**給jack,因為疫情他們不能見面,所以jack想和rose聊天只能打**並且必須要rose的手機開機才可以。

unix程序間通訊 使用管道通訊

使用管道需要注意以下4種特殊情況 假設都是阻塞i o操作,沒有設定o nonblock標誌 如果所有指向管道寫端的檔案描述符都關閉了 管道寫端的引用計數等於0 而仍然有程序從管道的讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會返回0,就像讀到檔案末尾一樣。如果有指向管道寫端的檔案描述符沒...

Linux程序間通訊 使用匿名管道

在前面,介紹了一種程序間的通訊方式 使用訊號,我們建立通知事件,並通過它引起響應,但傳遞的資訊只是乙個訊號值。這裡將介紹另一種程序間通訊的方式 匿名管道,通過它程序間可以交換更多有用的資料。一 什麼是管道 如果你使用過linux的命令,那麼對於管道這個名詞你一定不會感覺到陌生,因為我們通常通過符號 ...

Linux程序間通訊 使用共享記憶體

一 什麼是共享記憶體 顧名思義。共享記憶體就是同意兩個不相關的程序訪問同乙個邏輯記憶體。共享記憶體是在兩個正在執行的程序之間共享和傳遞資料的一種很有效的方式。不同程序之間共享的記憶體通常安排為同一段物理記憶體。程序能夠將同一段共享記憶體連線到它們自己的位址空間中,全部程序都能夠訪問共享記憶體中的位址...