unix網路程式設計之利用select 實現群發的功能

2021-08-26 11:27:57 字數 1605 閱讀 6771

首先 執行在linux 執行gcc -g -o select select.c

/ *******select.c*********/

/ *******using select() for i/o multiplexing */

#include #include #include #include #include #include #include #include /* port we're listening on */

#define port 2020

int main(int argc, char *argv)

printf("server-socket() is ok...\n");

/*判斷位址以用 */

if(setsockopt(listener, sol_socket, so_reuseaddr, &yes, sizeof(int)) == -1)

printf("server-setsockopt() is ok...\n");

/* bind */

serveraddr.sin_family = af_inet;

serveraddr.sin_addr.s_addr = inaddr_any;

serveraddr.sin_port = htons(port);

memset(&(serveraddr.sin_zero), '\0', 8);

if(bind(listener, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) == -1)

printf("server-bind() is ok...\n");

/* listen */

if(listen(listener, 10) == -1)

printf("server-listen() is ok...\n");

/* 把 listener 加到 master set */

fd_set(listener, &master);

/* keep track of the biggest file descriptor */

fdmax = listener; /* so far, it's this one*/

/* 迴圈了 */

for(;;)

printf("server-select() is ok...\n");

/*從存在的描述符中查詢要讀的資料*/

for(i = 0; i <= fdmax; i++)

else

printf("%s: new connection from %s on socket %d\n", argv[0], inet_ntoa(clientaddr.sin_addr), newfd);}}

else

else}}

}}

}} }

return 0;

}

然後在執行 ./select & 或者ctrl+z 讓他後台執行開乙個視窗 執行telnet localhostip 2020

程式如下

UNIX網路程式設計之SO REUSEADDR關鍵字

1 一般來說 乙個埠釋放後會等待兩分鐘之後才能再被使用 so reuseaddr 是讓埠釋放後立即就可以被再次使用。so reuseaddr 用於對tcp 套接字處於 time wait 狀態下的 socket 才可以重複繫結使用。server 程式總是應該在呼叫 bind 之前設定 so reus...

UNIX網路程式設計之環境配置

開始學習 unix網路程式設計 輸入第乙個程式後,遇到各種錯誤,先將解決方案記錄如下。mkdir home yourname download 建立存放壓縮檔案的目錄 tar xzvf unpv13e.tar.gz 解壓 ls al 檢視該目錄下的檔案 cd unpv13e 進入unpv13e ca...

unix網路程式設計之一TCP UDP

網路通訊中最常用的就是tcp udp。2種協議個有一些特點如下 udp是一種簡單的傳輸協議。應用程式寫資料到udp套介面。然後由它封裝成ipv4或ipv6的資料報,再傳送到目的位址。它不提供可靠性。它與伺服器不存在長期的連線關係。tcp是一種面向連線的協議。提供 可靠性 先連線,再傳輸資料。傳送資料...