黑馬程式設計師 網路程式設計中的服務端與客戶端

2021-06-08 00:13:26 字數 3124 閱讀 8676

---------------------- windows phone 7手機開發、net培訓、期待與您交流! ----------------------

關於網路程式設計中服務端與客服端通訊的自我理解,求評鑑。

網路通訊其實可以看做是網路節點之間的通訊,或者更直白的說是網絡卡之間的資料互動。

而網路節點(ipendpoint 物件)是由ip位址(ipaddress 物件)和埠(如:8080)組成。

網路節點之間的通訊是通過通訊工具(socket 物件)和對方的網路節點資訊來實現的(打**需要手機和對方**號碼)。

伺服器和客戶端在我看來,最大的不同是:伺服器是相對固定的(只有乙個),而客戶端可以有很多個,他們之間是一對多的關係。

所以,伺服器需要繫結(socket 物件.bind())到乙個固定的網路節點(不能隨意更改),客戶端則不需要。

雖然伺服器與眾多客戶端通訊,但是伺服器為每乙個與之通訊的客戶端分配乙個固定的socket並將之儲存到乙個容器裡(如dictory)以便通訊識別,直到通訊結束,socket銷毀。

通訊過程:

一、伺服器啟動並監聽客戶端請求:

//通過ip位址和埠建立網路節點物件

ipaddress address=ipaddress.parse(伺服器ip位址);

ipendpoint endpoint=new ipendpoint(address,int.parse(埠));

//建立乙個套接字(工具,固定**)

socket socketwatch =new socket(addressfamily.internetwork,sockettype.stream,protocoltype.tcp);

//將套接字繫結到唯一的網路節點上

socketwatch.bind(endpoint);

//設定監聽佇列長度

socketwatch.listen(10);

//通過執行緒為每乙個與之連線的客服端分配乙個socket物件:

thread threadwatch=new thread(watchconnecting);//建立負責監聽的執行緒,並傳入監聽方法

threadwatch.isbackground=true;//設定為後台執行緒

threadwatch.start();//開啟執行緒

//建立監聽方法

void watchconnecting()

二、客戶端連線伺服器

//通過ip位址和埠建立要連線的伺服器網路節點物件

ipaddress address=ipaddress.parse(伺服器ip位址);

ipendpoint endpoint=new ipendpoint(address,int.parse(埠));

//建立乙個套接字(工具,固定**)

socket socketclient =new socket(addressfamily.internetwork,sockettype.stream,protocoltype.tcp);

//向伺服器網路節點傳送連線請求

socketclient.connect(endpoint);

三、伺服器端向客戶端傳送訊息,客戶端接收訊息

1、//通過ip位址和埠建立網路節點物件

ipaddress address=ipaddress.parse(伺服器ip位址);

ipendpoint endpoint=new ipendpoint(address,int.parse(埠));

//建立乙個套接字(工具,固定**)

socket socketwatch =new socket(addressfamily.internetwork,sockettype.stream,protocoltype.tcp);

//將套接字繫結到唯一的網路節點上

socketwatch.bind(endpoint);

//設定監聽佇列長度

socketwatch.listen(10);

//建立乙個dictory用來儲存所有與伺服器通訊的套接字

dictorydic=new dictory;

//通過執行緒為每乙個與之連線的客服端分配乙個socket物件:

thread threadwatch=new thread(watchconnecting);//建立負責監聽的執行緒,並傳入監聽方法

threadwatch.isbackground=true;//設定為後台執行緒

threadwatch.start();//開啟執行緒

//獲取與要傳送資訊的客戶端套接字,並呼叫方法傳送訊息

string strmsg="要傳送的訊息";

byte arrmsg=system.text.encoding.utf8.getbytes(strmsg);

dic[lbonline.text].send(arrmsg);//從lbonline控制項中取得網路節點資訊,並從套接字集合裡獲得客戶端套接字

//建立監聽方法

void watchconnecting()

2、客戶端接收訊息

//通過ip位址和埠建立要連線的伺服器網路節點物件

ipaddress address=ipaddress.parse(伺服器ip位址);

ipendpoint endpoint=new ipendpoint(address,int.parse(埠));

//建立乙個套接字(工具,固定**)

socket socketclient =new socket(addressfamily.internetwork,sockettype.stream,protocoltype.tcp);

//向伺服器網路節點傳送連線請求

socketclient.connect(endpoint);

//建立執行緒 監聽伺服器端發來的訊息

thread threadclient=new thread(recmsg);

void recmsg()

}以上只是部分功能,其他功能**大同小異。當然,以上**有很多重複的地方,只是為了

單獨說明某乙個功能模組的執行過程,並不能作為實際程式設計**,有錯誤的地方請指正,謝謝!

---------------------- windows phone 7手機開發、 .net培訓 期待與您交流! ----------------------

詳情請檢視:

黑馬程式設計師 網路程式設計

asp.net android ios開發 net培訓 期待與您交流!1.套接字 socket 用於描述 ip位址和埠,是乙個通訊鏈的控制代碼 就是兩個程式通訊用的 類似於 2.有兩種型別 流式socket 是一種面向連線的 socket 針對於面向連線的 tcp服務應用,安全,但效率低 資料報式 ...

黑馬程式設計師 網路程式設計

asp.net android ios開發 net培訓 期待與您交流!1 網路程式設計 1 網路程式設計 通過程式語言實現計算機鍵的資料通訊。2 網路程式設計的三要素 a ip位址。網路中每一台計算機的唯一標識。b 埠 用於標識程序的邏輯位址 c 協議 定義通訊規則 舉例 我要和小青說話。a 找到小...

黑馬程式設計師 網路程式設計

asp.net unity開發 net培訓 期待與您交流!網路傳輸過程 1,找到對方ip 2,資料傳送到指定埠 每個應用程式對應乙個埠 3,定義通訊規則,即協議 tcp ip tcp 1,面向連線,形成傳輸資料的通道 像打 2,連線中進行大量資料量傳輸 3,可靠協議,三次握手,4,必須建立連線,效率...