學習過計算機網路的同學,知道三次握手和四次揮手的同學可以略過下面的解釋。
何為套接字,你讓乙個人找到你家在哪,那麼需要的就是位址,何為位址(哪個省 哪個市 哪個小區 哪一棟樓 哪個門牌號)。那麼計算機網路通訊世界中的套接字就是如此,這裡記住它就是乙個ip位址+埠號。不深究其原理,懂的意思就行,深究清出門左轉,有更好的blog等著大家發掘。
1.服務端的工作原理解釋
①伺服器端首先使用socket()函式建立套接字描述符,使用的是8000埠號監聽以及自己的環迴位址作為固定的服務端套接字,並且使用bind()函式繫結套接字。用於客戶端的請求服務端的服務。然後就開啟listen函式用於監聽套接字上的客戶端連線請求。並且使用的是執行緒庫來建立服務執行緒用於處理來自客戶端的服務請求,這樣的話使得一對一的服務端客戶端模式變成一對多的服務端服務客戶端模式。
②本實驗未使用fork()子程序來實現對客戶端的請求響應執行工作,使用的是執行緒來處理客戶端的請求,每當乙個客戶端連線服務端的時候,服務端呼叫pthread_create()函式建立乙個執行緒用於處理客戶端的請求。由於考慮到連線使用者的數量以及服務端的負載能力,所以監聽只允許最多20個客戶端連線服務端。在posix執行緒庫的呼叫中使用了pthread_detach()函式,在建立執行緒前設定執行緒建立屬性,設為分離態,效率高。使得執行緒庫的呼叫,讓系統資源得以更好地,更高效率的使用。
③服務端在緩衝區接收到客戶端傳來的資訊之後會呼叫toupper函式將字元轉換為大寫字元,並且重寫回緩衝區,以供客戶端顯示轉換後的資訊。
2.服務端工作原理解釋
客戶端傳送鏈結請求,與服務端連線(三次握手,四次揮手),確保雙方的傳送和接收能力沒問題之後,即可完成連線的建立。在客戶端終端輸入資料(即特殊檔案套接字),傳送到服務端,服務端從套接字中讀出資料,經過字元轉換函式為大寫的字元,再次寫入socket中,客戶端再次從socket中讀出資料顯示在客戶端終端上。即剛開始的小寫變成大寫。
這邊給個流程圖吧:
/* server.c */
#include
#include
#include
#include
#include
#include
#include
#define maxline 80
//客戶端最大輸入長度
#define serv_port 8000
//預設server監聽埠號
struct s_info
;void
*do_work
(void
*arg)
printf
("received from %s at port %d\n"
,inet_ntop
(af_inet,&(
*ts)
.cliaddr.sin_addr, str,
sizeof
(str)),
ntohs((
*ts)
.cliaddr.sin_port));
for(i =
0; i < n; i++
) buf[i]
=toupper
(buf[i]);
//write
(ts->connfd, buf, n);}
close
(ts->connfd);}
intmain
(void
)return0;
}
/* client.c */
#include
#include
#include
#include
#include
#include
#define maxline 80
#define serv_port 8000
intmain
(int argc,
char
** ar**)
close
(sockfd)
;//關閉套接字描述符
return0;
}
域套接字 多客戶端實現
我們在linux 應用開發中,如果需要實現程序間通訊的多客戶端介面,就需要引入select 和epoll 相關機制了,本文介紹下epoll的功能的實現。多客戶端使用場景,比如我們需要開發乙個庫介面,提供給客戶呼叫,那麼使用域套接字實現程序間通訊,就必須在service端引入多路復用,否則庫功能就只能...
同步客戶端套接字示例
同步客戶端套接字示例 下面的示例程式建立乙個連線到伺服器的客戶端。該客戶端是用同步套接字生成的,因此掛起客戶端應用程式的執行,直到伺服器返回響應為止。該應用程式將字串傳送到伺服器,然後在控制台顯示該伺服器返回的字串。using system using system.net using system...
tcp套接字客戶端 服務端Demo
tcp socket 服務端編寫步驟 1 建立socket 2 bind套接字 3 listen監聽套接字 4 accept等待客戶端連線 5 read write資料的讀寫 6 close關閉套接字 tcp socket 客服端編寫步驟 1 socket套接字建立 2 connect連線 3 re...