TCP伺服器通訊

2021-08-03 20:33:46 字數 1555 閱讀 2962

tcp協議的通訊流程:

單程序版本的server.c

伺服器主要用到的埠:

聽myaddr所描述的位址和埠號。

accept():典型的伺服器程式可以同時服務於多個客戶端,當有客戶端發起連線時,伺服器呼叫的accept()返回並接受這個連線,如果有大量的客戶端發起連線而伺服器來不及處理,尚未accept 的客戶端就處於連線等待狀態。

listen():宣告sockfd處於監聽狀態,並且最多允許有backlog個客戶端處於連線等待狀態,如果接收到更多的連線請求就忽略。listen()成功返回0,失敗返回-1。

客戶端主要用到的埠:

由於客戶端不需要固定的埠號,因此不必呼叫bind(),客戶端的埠號由核心自動分配。

客戶端需要呼叫connect()連線伺服器,connect和bind的引數形式一致,區別在於bind的引數是自己的位址,而connect的引數是對方的位址。connect()成功返回0,出錯返回-1

進行本地環迴測試:

多程序版本:(部分**)

多執行緒版本:

bind()為什麼會失敗?

解決方法:使用setsockopt()設定socket描述符的選項so_reuseaddr為1,表示允許建立埠號相同但ip不同的多個socket描述符。所以只需在server**中的socket()和bind()呼叫之間插入下面**:

int opt = 1;

setsockopt(sock,sol_socket,so_reuseaddr,&opt,sizeof(opt));

伺服器和客戶端 tcp通訊

在vs2013的環境下,伺服器 如下 include include stdafx.h include pragma comment lib,ws2 32.lib using namespace std define buffer rev 1024 define buffer send 1024 i...

兩端口通訊TCP伺服器 Linux

xyt zhejiang 2017 5 include include include include include include include include include include include define port 1 11910 define port 2 11911 de...

TCP伺服器模型

迴圈伺服器 迴圈伺服器在同乙個時刻只可以響應乙個客戶端的請求 併發伺服器 併發伺服器在同乙個時刻可以響應多個客戶端的請求 9.1 迴圈伺服器 udp伺服器 udp迴圈伺服器的實現非常簡單 udp伺服器每次從套接字上讀取乙個客戶端的請求,處理,然後將結果返回給客戶機.可以用下面的演算法來實現.sock...