Linux 網路程式設計(day13)

2022-05-19 17:17:29 字數 2812 閱讀 3996

一、基於tcp的網路程式設計(續day12)

二、併發伺服器

三、基於udp的網路程式設計

一、基於tcp的網路程式設計(續day12)

1、昨天的例子客戶端只能向指定的伺服器端傳送資料,可以利用主函式引數傳遞命令列引數,從而接收任意伺服器位址。同時也可以實現兩台機器之間的通訊(可以事先使用ping命令檢視是否通)

2、也可以使用while迴圈在客戶端不斷接收資料輸入,知道特定字元結束輸入關閉通訊,如使用fgets,或gets

#if 0

#endif

可以進行條件注釋

基於tcp的伺服器:

#include #include 

#include

in.h>#include

#include

#include

#include

intmain()

struct

sockaddr_in addr;

addr.sin_family =af_inet;

addr.sin_port = htons (8888

); addr.sin_addr.s_addr =inaddr_any;

if (bind (listenfd, (struct sockaddr*)&addr, sizeof (addr)) == -1

)

if (listen (listenfd, 1024) == -1

)

struct sockaddr_in addrcli ={};

socklen_t addrlen = sizeof

(addrcli);

int connfd = accept (listenfd, (struct sockaddr*)&addrcli, &addrlen);

if (connfd == -1

)

printf (

"伺服器已接受來自%s:%hu客戶機的連線請求\n

", inet_ntoa (addrcli.sin_addr),ntohs (addrcli.sin_port));

char buf[1024

]; ssize_t rcvd = recv (connfd, buf, sizeof (buf), 0

);if (rcvd == -1

)

if (rcvd == 0

)

buf[rcvd] = '\0'

; printf (

"客戶端說:%s\n

", buf);

printf (

"伺服器說:");

gets (buf);

ssize_t sent = send (connfd, buf, strlen (buf) * sizeof (buf[0]), 0

);if (sent == -1

)

if (close (listenfd) == -1

)

if (close (connfd) == -1

)

return0;

}

基於tcp的客戶端:

#include #include 

#include

in.h>#include

#include

#include

#include

intmain()

struct

sockaddr_in addr;

addr.sin_family =af_inet;

addr.sin_port = htons (8888

); addr.sin_addr.s_addr = inet_addr("

127.0.0.1");

if (connect (listenfd, (struct sockaddr*)&addr, sizeof (addr)) == -1

)

char buf[1024] = "

你好,伺服器";

printf (

"客戶端說:%s\n

", buf);

ssize_t sent = send (listenfd, buf, strlen (buf) * sizeof (buf[0]), 0

);if (sent == -1

)

ssize_t rcvd = recv (listenfd, buf, sizeof (buf), 0

);if (rcvd == -1

)

buf[rcvd] = '\0'

; printf (

"伺服器說:%s\n

", buf);

if (close (listenfd) == -1

)

return0;

}

上述伺服器只能給乙個客戶端提供服務,這就需要後面講到的併發來解決。

可以使用setsockopt(2)來設定socket屬性,或者getsockopt(2)來獲取socket屬性。

二、併發伺服器

1、使用執行緒實現併發伺服器

2、多路復用計數實現併發伺服器

select(2)、poll(2)等

3、使用多程序實現併發伺服器

在這裡需要分清楚,父程序,子程序的作用,以及fork的時機。

前端學習Day13

一.如果考慮相容最小高度的設定 了解 1.正常專案中 最小高度直接用min height即可。如果考慮相容 min height 在ie6不相容,ie6預設把height解析成最小高度。注 如果height 和 min height同是出現,執行height固定高度。2.最小高度的相容設定方法 了解...

每日演算法 day 13

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.2.25 記錄下來自己做題時得思路,並不一定是最優解 暴力。應該會有更好得方法 i...

每日總結 Day13

activity跳轉 如果分屏之後,想跳轉進入的目標activity展示在另一半的螢幕中,則需要設定以下flag intent.addflags intent.flag activity new task intent.flag activity launch adjacent 明天將繼續這一塊的工...