基於socket伺服器端實現本例主要是建立多客戶端與伺服器之間的資料傳輸,首先設計伺服器。開啟vs2008,在d:\c#\ch17目錄下建立名為socketserver的windows應用程式。開啟工程,往當前窗體中新增控制項,如表17-6所示。
表17-6 新增控制項列表
控 件
name
text
listbox
lbinfo
label
label
button
button1
啟動伺服器
設計好的介面如圖17-2所示。
接下來開始運用前面的知識設計伺服器,主要分為以下步驟。
(1)首先是對一些命名空間的包含,包括system.net、system.net.sockets、system.io和system.threading。然後定義一系列的全域性變數,如下所示。
private socket s; //定義socket物件
private thread th; //
客戶端連線伺服器的執行緒
public socket csocket; //
單個客戶端連線的socket物件
public networkstream ns; //
網路流public streamreader sr; //
流讀取public streamwriter sw; //
流寫入private
delegate
void settextcallback(); //
用於操作主線程式控制件
(2)接下來是設計客戶端連線的管理,主要包括伺服器與客戶端之間的連線和收發資料問題,把它們放在乙個函式communication裡,如下所示。
publicvoid communication()
else
}catch (socketexception ex)
catch (exception es)}}
//以下**的用法在第16章有關執行緒的用法時曾提到過,主要用於從當前執行緒操作主線程中的控制項,這裡就不在贅//述
public
void send()
public
void test()
(3)定義好與客戶端的連線後,接下來需要利用執行緒來啟動,雙擊「啟動伺服器」按鈕,新增如下**。
button1.enabled = false;s = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);//
建立socket物件
ipaddress serverip = ipaddress.parse("
222.18.142.171
");ipendpoint server = new ipendpoint(serverip,13); //
例項化伺服器的ip和埠
s.bind(server);
s.listen(10);
trycatch(exception ex)
(4)最後在關閉伺服器視窗的時候,還應該關閉執行緒和當前socket連線,**如下所示。
protectedoverride
void dispose(bool disposing)
base.dispose(disposing);
}catch}//
接著為當前窗體的formclosed事件新增如下**。
this.close();
至此,伺服器就設計完了,下面接著看客戶端。
基於socket客戶端實現開啟vs2008,在d:\c#\ch17目錄下建立名為socketclient的windows應用程式。開啟工程,往當前窗體中新增控制項,如表17-7所示。
表17-7 新增控制項列表
控 件 名
name
text
groupbox
groupbox1
向伺服器傳送訊息
label
label1
傳送訊息:
textbox
textbox1
button
button2
傳送listbox
lbinfo
groupbox
groupbox1
伺服器回饋資訊
客戶端的設計主要分為以下步驟。
(1)首先要做的工作還是要引用一些命名空間,如下所示。
using system.io;using system.net.sockets;
using system.net;
然後定義一系列的全域性變數,如下所示。
private socket s; //定義socket物件
public networkstream ns; //
網路流public streamreader sr; //
流讀取
public streamwriter sw; //
流寫入
(2)雙擊「傳送」按鈕,新增如下**。
s = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);serverip = ipaddress.parse("
222.18.142.171
"); //
伺服器ip
trycatch (exception ex)
trycatch (exception ex)
(3)最後,關閉socket連線,釋放資源,可以直接在窗體的formclosed事件中進行,如下所示。
s.shutdown(socketshutdown.both);
s.close();
至此,伺服器和客戶端已經全部設計完畢,下面看執行效果。
基於socket的c/s例項的執行首先,啟動伺服器程式,單擊「啟動伺服器」按鈕,如圖17-4所示。接著再啟動客戶端,並在textbox1輸入資料(中英文皆可),多次單擊「傳送」按鈕,如圖17-5所示。
此時,伺服器的狀態如圖17-6所示。
收到客戶端傳送的資料
從圖17-6中可以看出,此時伺服器已經收到來自客戶端的資料,而圖17-5中顯示客戶端也收到了來自伺服器的回饋訊息。此外,本例還能實現多個客戶端向乙個伺服器同時收發資料,並已經在三颱計算機(乙個伺服器和兩個客戶端)上測試通過。本例只是實現了伺服器與客戶端最簡單的資料傳輸,讀者如果有興趣可以在此基礎上再新增其他功能,比如可以利用前面講的資料庫知識,在伺服器端寫個使用者登入驗證,讓客戶端通過驗證後才能收發資料等。
在網路中,收發資料會經常使用socket。本節中主要運用了幾節中介紹的socket基礎知識完成了乙個簡單的基於流的c/s模式例子。在下一節中,將介紹另一種傳輸方式——基於資料報(udp)。
C 基於Socket的CS模式的完整例子
基於socket伺服器端實現本例主要是建立多客戶端與伺服器之間的資料傳輸,首先設計伺服器。開啟vs2008,在d c ch17目錄下建立名為socketserver的windows應用程式。開啟工程,往當前窗體中新增控制項,如表17 6所示。表17 6 新增控制項列表 控 件 name text l...
C 利用Socket實現C S模式通訊
首先我們要了解一下幾點內容 簡單來說 tcp控制傳輸資料,負責發現傳輸的問題,一旦有問題就發出訊號,要求重新傳輸,直到所有資料安全正確地傳輸到目的地,而ip是負責給網際網路中的每一台電腦定義乙個位址,以便傳輸。從協議分層模型方面來講 tcp ip由 網路介面層 鏈路層 網路層 傳輸層 應用層。它和o...
基於TCP的 C S模式 網路應用程式
伺服器端程式實現步驟 1。建立套接字 socket 2。將套接字繫結到乙個本地位址和埠上 bind 3。將套接字設為監聽模式,準本接受客戶請求 listen 4。等待客戶請求到來 當請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5。用返回的套接字和客戶端進行通訊 sen...