C 使用Socket實現伺服器與客戶端的通訊

2021-06-22 10:56:12 字數 2240 閱讀 1432

一. 實驗要求

1.設計程式,分別構建通訊的兩端:伺服器端和客戶端應用程式,套接字型別為面向連線的socket,自己構建雙       方的應答模式,實現雙方的資料的傳送和接收(s發給

c,c發給

s)。2.服務端程式能響應單個或任意多個客戶端連線請求:服務端能向單個客戶傳送訊息,支援**訊息給所有客戶    端。

3.通訊的雙方具備異常響應功能,包括對方異常退出的處理。如果客戶端退出,伺服器有響應,反之亦然。

二. 設計思路

1. 建立伺服器端和客戶端的主體框架:首先在伺服器端的windows窗體中新增6個

label

控制項,2

個textbox

控制項,2              

個richtextbox

控制項,1

個listbox

控制項和1

個button

控制項然後在

windows

窗體中新增5個

label

控制項,2

個textbox件,2

個richtextbox

控制項,1

個button

控制項。建立程式的主要介面後,系統自動生成介面的主要視窗生成**。在伺服器端和客戶端的每個按鈕的**段中,分別新增事件觸發的處理**。其中2個

textbox

用來存放

ip位址和端     口號,而

listbox

用來顯示當前連線伺服器的客戶端,

richtextbox

用來顯示雙方的通訊資訊。

2. 在伺服器端,首先獲取本機的ip位址,並制定乙個埠號,然後建立乙個本地套接字物件,將套接字繫結到用於

tcp通訊的本地

ip位址和埠上,

bind

方法用於完成繫結       工作,將套接字與埠繫結後,就用

listen

方法等待客戶端發出的連線嘗試,這裡指定了系統等待使用者程式服務排列的連線數為10;

listen

方法執行之後,伺服器就做好了接收任何連線的準備;此時,可用

accept

方法從請求佇列中獲取連線,程式執行到

accept

方法 時被阻塞,直到接收到客戶端的連線請求,才繼續執行下一條語 句,服 務器一旦接收了該客                戶端的連線請求,accept方法就立即返回乙個與客    戶端通訊的新的套接字,這樣伺服器就可以  利用該套               接字與該客戶端進行通訊了。

3. 客戶端利用

socket

的connect

方法向遠端主機的端點發起連線請求,並將   自身繫結到系統自動分配的端點上。在伺服器與客戶端建立連線之前,系    統不會執行connect

語句下面的語句,而是處於阻塞狀態,知道連線成功   或出現異常為止。此時,客戶端建立乙個接收資訊的執行緒,用於接收服務   器發過來的訊息。

4. 當伺服器與客戶端建立連線後,客戶端與伺服器就能使用

socket

物件的   send和

receive

方法進行通訊。由於在伺服器與客戶端的通訊過程中,需    要跨執行緒向控制項中輸入通訊資訊,為了確保不出現異常,需要宣告,例項   化和使用委託,已達到向不同的控制項輸出通訊資訊的效果。

5. 在實現伺服器向多個客戶端通訊的時候,需要用

list

集合來儲存通訊成功   的客戶端,在伺服器的listbox

中的selectedindex

屬性判斷是否已選擇通訊的客戶端,再用

for   迴圈向選中的客戶端傳送訊息。

6. 通訊完成後,必須先用

shutdown

方法停止會話,然後關閉

socket

例項。三.socket

通訊核心**:

///

/// 窗體初始化,獲取本地ip位址,並建立套接字物件,

/// 將套接字繫結到本地ip位址和埠上,然後監聽等待客戶端發出的連線請求

///

///

///

///

///

private void client_load(object sender, eventargs e)

private void listenconnect()

catch

}private void listenreceive()}

使用socket實現簡單地http伺服器

本文使用ubuntu虛擬機器作為伺服器端 任意瀏覽器作為訪問瀏覽器 標識響應瀏覽器,不會再瀏覽器中顯示 response r n 換行 response hello,world 瀏覽器中輸出的結果 new socket.send response.encode utf 8 new socket.cl...

socket實現獲取伺服器時間

上次初步實現了一下socket的應用程式。這次在針對socket寫乙個應用程式。這次的應用是實現客戶端從主機獲取時間並且設定為自己的時間 伺服器 include include include include include include include include include defin...

swoole實現socket伺服器初探

因為專案中需要實時獲取一些 資料,以前的做法是使用ajax做定時請求,眾所周知的原因這樣效能會比較差,想用websocket來重新實現。我這裡想要實現的並不是簡單的 客戶端請求 服務端返回 這樣的邏輯,這種實現起來會很簡單,我要實現的是在伺服器端維護乙個列表,當有客戶端在這個列表中註冊的話,服務端便...