用select實現TCP回射程式(伺服器及客戶端)

2021-08-11 12:26:29 字數 2458 閱讀 8351

該程式系參考《unp》來編寫的,主要用來練習select及shutdown函式的使用。

伺服器**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define port 8888

#define backlog 100

#define maxline 1024

int main()

//寫入套接字位址

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_addr.s_addr = htonl(inaddr_any);

servaddr.sin_port = htons(port);

//繫結位址

if ((n = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0)

//監聽

if ((n = listen(listenfd, backlog)) < 0)

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

client[i] = -1;

maxfd = listenfd;

maxcli = -1;

fd_zero(&allset);

fd_set(listenfd, &allset);

for (;;)

if (fd_isset(listenfd, &rset))

printf("accept: %d\n", connfd);

//更新連線表

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

if (client[i] < 0)

fd_set(connfd, &allset); //更新描述符集

if (connfd > maxfd)

maxfd = connfd; //更新最大檔案描述符

if (i > maxcli)

maxcli = i; //更新最大連線表索引

if (--nready <= 0)

continue;

}for (i = 0; i <= maxcli; i++)

printf("close: %d\n", sockfd);

fd_clr(sockfd, &allset);

client[i] = -1;

} else

if (n > 0) }}

if (--nready <= 0)

break;}}

}}

客戶端**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define port 8888

#define maxline 1024

int main(int argc, char* argv)

if((sockfd = socket(af_inet, sock_stream, 0)) < 0)

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(port);

if((n = inet_pton(af_inet, argv[1], &servaddr.sin_addr)) < 0)

else

if(n == 0)

if((n = connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)

maxfd = sockfd;

fd_zero(&rset);

stdineof = 0;

for(;;)

if(fd_isset(0, &rset))

fd_clr(0, &rset);

continue;

}else

if(n < 0)

if((n = write(sockfd, buf, n)) < 0)

}if(fd_isset(sockfd, &rset))

}else

if(n < 0)

if((n = write(1, buf, n)) < 0)}}

return

0;}

TCP 回射程式

客戶端從標準輸入讀入一行文字,並發給伺服器 伺服器從網路輸入讀入這行文字,並且回射給客戶 客戶從網路輸入讀入這行回射文字,並且顯示在標準輸出上。伺服器從網路讀入和返回 void str echo int sockfd while 1 int main 父程序中關閉已連線套接字 close connf...

TCP網路程式設計之echo回射程式

tcp網路程式設計有三個例子最值得學習研究,分別是echo chat proxy,都是長連線協議。接下來,把這幾個例子都實現。本節用乙個簡單的例子來講tcp客戶 伺服器程式框架,這也是echo的實現。程式的基本流程 客戶從標準輸入鍵入一行文字,並傳送給伺服器。伺服器接收到文字之後回射給客戶端。客戶端...

(unix網路程式設計)tcp回射程式二 避免殭屍程序

本例在上一例的基礎上增加了singal函式來捕捉子程序退出時候產生的sigchld訊號,從而防止子程序變成殭屍程序。伺服器端的 如下 include include include include include include include include include include def...