【转】TcpListener和tcpclient使用
前段時間公司項目中遇著需要做文件的遠程傳輸,場景是用戶通過網頁選擇一些文件,然后提交請求到服務器,同時把請求標識傳遞給本機的TCP文件傳輸端;服務器收到請求后在服務器端創建任務生成保存文件的路徑同時通知文件傳輸端開始傳文件到服務器,當時是同事用C++寫的傳輸端,于是便想何不用NET來實現呢,本來服務端的大部分程序和客戶端程序都是用NET寫的,于是便有了這篇文章。小生一直是做web開發的,對WinForm技術不勝熟悉,如有不妥還請拍磚。
在NET框架下可以方便的使用tcplistener和tcpclient兩個類來實現tcp編程,而無需直接操作socket,這也是這兩個類方便的地方。對于tcplistener可以理解是用在服務端的,僅需要設置一個監聽端口即可,如
var listener = new TcpListener(9000);//監聽9000端口
然后調用 Start方法開始監聽:
?listener.Start(10);//掛起隊列最大長度10個
再然后就是等待客戶端的接入了,通常可以用一個無限循環來接受不斷請求的客戶端
while (true)
?{
??????? if (listener.Pending())//異步接受一個請求
?????? {
?????????var client=??listener.AcceptTcpClient();
//現在就可以使用client,愛干嘛干嘛吧
?????? }
}
在這里,為了實現多個客戶端同時訪問通常會使用異步的BeginAcceptTcpClient來接受客戶端請求
有了client,通過GetStream方法就得到當前的網絡流,使用Write,Read方法即可進行數據寫入和讀取。
對于tcpclient,使用的時候您需要告訴他去連接哪臺計算機的哪個端口(使用Endpoint來表示),然后調用Connect方法,就像下面這樣
var? _endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),9000);
var client = new TcpClient();
client.Connect(_endPoint);
如果服務端是開啟的,這樣就能連接上了。
下一步就是讀取或者發送數據到服務端了,同樣可以使用GetStream方法獲取到網絡流,使用Write,Read方法即可進行數據寫入和讀取。
這些操作都是基于流進行的,因此數據本身不具有結構,比如對于一個操作,服務端需要知道操作名和操作數據,這兩個東西放在流里一起發送過去沒有人會認識,這就要求服務端和客戶端在傳遞數據的時候遵循一致的數據結構,比如使用這樣的 method:getname#parms:ky?
現在介紹下本篇附帶的實例:
在服務端啟動的時候會要求用戶輸入一個共享的文件夾路徑,然后啟動服務,這個服務會提供給客戶端這個文件夾下的圖片文件列表,同時也可以讓客戶端下載圖片;
客戶端啟動時要求用戶輸入一個服務端的地址,然后點擊getfilelist來獲取遠程文件夾的文件列表,然后選擇一個文件即可下載這個文件到本地。
部分截圖:
服務端
客戶端
源文件下載
總結
以上是生活随笔為你收集整理的【转】TcpListener和tcpclient使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酷派COOL 20s 5G怎么样?千元档
- 下一篇: 1999元 索尼发布枪型麦克风ECM-B