成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#網絡通信:TCP連接

開發 后端
TCP連接的特點是連接一直存在,即建立連接后可以隨時傳輸數據,直至斷開連接為止。本文主要介紹了C#網絡通信中的TCP連接步驟。

基本原理:TCP連接的特點是連接一直存在,即建立連接后可以隨時傳輸數據,直至斷開連接為止。TCP連接有著明確的服務器和客戶端的分工,因此需要分別編程處理。

網絡通信用到的命名空間:

  1. using System.Net;  
  2. using System.Net.Sockets; 

C#網絡通信:TCP連接第一步——獲取服務器的IP地址

當然您可以通過ipconfig等方式查詢作為服務器的計算機的IP地址,這里介紹通過C#語句獲取的方法。

  1. private String GetIPAddress()  
  2.  {  
  3.      String str;  
  4.      String Result = "";  
  5.      String hostName = Dns.GetHostName();  
  6.      IPAddress[] myIP = Dns.GetHostAddresses(hostName);  
  7.      foreach (IPAddress address in myIP)  
  8.      {  
  9.          str = address.ToString();  
  10.          for (int i = 0; i <  str.Length; i++)  
  11.          {  
  12.              if (str[i] >= '0' && str[i] < = '9' || str[i] == '.') Result = str;  
  13.          }  
  14.      }  
  15.      return Result;  
  16.  } 

紅色的部分是核心的語句,獲取的是一組IP地址,存儲在 IPAddress[] myIP 中。這組IP地址包含物理(依次輸出下就會發現),但我們最常用的是32位的IP地址,因此編寫了這個方法進行篩選。

C#網絡通信:TCP連接第二步——服務器建立監聽

  1. IPAddress ipa = IPAddress.Parse("192.168.1.100");  
  2.  
  3. TcpListener myListener = new TcpListener(ipa, 8080);  
  4.  
  5. myListener.Start(); 

紅色的部分是服務器的IP地址和要開放的端口號,視具體情況而定。端口號為整型。

C#網絡通信:TCP連接第三步——客戶端請求連接

  1. TcpClient tclient = new TcpClient();  
  2.  
  3. tclient.Connect("192.168.1.100", 8080); 

如果客戶端請求連接時服務器并未開啟監聽,則會拋出 SocketException 異常。所以一是要確保服務器開啟監聽了再請求連接,二是應該把這兩行代碼放入到try-catch里面,以便連接不成功時程序不會崩潰。

C#網絡通信:TCP連接第四步——服務器應答

  1. Socket mySocket = myListener.AcceptSocket(); 

服務器將連接綁定給mySocket,以后和客戶端的通信都通過mySocket來完成。

但這里需要注意,如果執行該語句時沒有客戶端請求連接,則會進入無盡的等待,使程序出現“未響應”的狀態。因此Socket的下面這個方法將極為有用:

  1. if (myListener.Pending())  
  2. {  
  3.        Socket mySocket = myListener.AcceptSocket();  
  4.   } 

Pending()的作用是“確定是否有掛起的連接請求”,如果有則返回true。這樣以來就實現了有請求時才去接受,再配合WinForm的Timer組件使用,可以達到很好的效果。

至此,連接工作已完成。總結一下,只有第三步是客戶端的代碼,其余都是服務器的代碼。

C#網絡通信:TCP連接第五步——發送數據和接收數據

1.服務器發送:

  1. mySocket.Send(Encoding.Unicode.GetBytes("要發送的內容")); 

2.服務器接收:

  1. byte[] data = new byte[1024];  
  2.  if (mySocket.Available > 0)  
  3. {  
  4. mySocket.Receive(data);  
  5. String content = Encoding.Unicode.GetString(data);  

3.客戶端發送:

  1. NetworkStream ns = tclient.GetStream();  
  2.  
  3. String content = "要發送的內容";  
  4.  
  5. byte[] data = Encoding.Unicode.GetBytes(content);  
  6.  
  7.  ns.Write(data, 0, data.Length); 

4.客戶端接受:

  1. if (tclient.Available > 0)  
  2. {  
  3. byte[] data = new byte[1024];  
  4. ns.Read(data, 0, 1024);  
  5. String content = Encoding.Unicode.GetString(data);  

服務器使用Send和Receive方法,客戶端使用NetworkStream流。其中 mySocket.Available > 0 和 tclient.Available > 0 的作用與 myListener.Pending() 的作用相同,都是先判斷是否有數據可讀再進行讀取,否則也會失去響應。Encoding.Unicode的方法用于字符串和字節數組間的轉換,因為網絡中的數據是以字節傳輸的。接收數據時也可以使用Timer來達到更好的效果。

【編輯推薦】

  1. C#控制臺應用程序的基本結構
  2. C#編程:使用迭代器
  3. 淺談C#泛型的定義、繼承、方法和約束
  4. C++和C#相互調用COM組件的方法簡介
  5. 如何實現C#代理(Delegate)
責任編輯:book05 來源: hi.baidu
相關推薦

2024-10-31 10:03:17

2019-04-29 10:26:49

TCP網絡協議網絡通信

2019-09-02 10:20:27

TCPIP協議

2019-10-22 08:11:43

Socket網絡通信網絡協議

2012-12-21 09:19:29

Google GO

2012-09-24 15:13:50

C#網絡協議TCP

2020-11-12 08:52:16

Python

2021-12-09 16:48:25

鴻蒙HarmonyOS應用

2022-12-05 09:25:17

Kubernetes網絡模型網絡通信

2024-02-20 19:53:57

網絡通信協議

2009-08-21 14:47:39

C#網絡編程

2010-06-09 11:31:55

網絡通信協議

2016-08-25 11:17:16

CaaS華為

2022-05-13 10:59:14

容器網絡通信

2009-10-16 08:48:08

2010-04-22 16:10:48

Aix操作系統網絡通信

2019-09-25 08:25:49

RPC網絡通信

2021-08-30 13:08:56

Kafka網絡通信

2023-09-18 13:12:00

TCPUDP

2024-12-24 07:38:44

C#串口通信
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 草草视频在线播放 | 91免费小视频 | 天天天操天天天干 | 日本黄视频在线观看 | 亚洲欧洲成人av每日更新 | 欧美日韩久久久 | 欧美激情精品久久久久久 | 啪视频在线 | 欧美最猛性xxxxx亚洲精品 | 97视频久久 | 在线免费观看黄色 | 天天干天天爱天天操 | 一本色道精品久久一区二区三区 | 91看片网站 | av日韩高清 | 国产激情视频在线免费观看 | 91在线免费视频 | av免费网站在线观看 | 日本中文字幕在线视频 | 久久久av中文字幕 | 亚洲精品18 | 在线欧美| 国产精品一区二区久久 | 日韩电影免费在线观看中文字幕 | 国产一区二区久久 | 国产一区二区不卡 | av黄色免费| 天天精品综合 | 中文字字幕在线中文乱码范文 | 久久久久久久久久久高潮一区二区 | 一区二区三区欧美 | 91久久久久久久久久久久久 | 人人人人干| 丁香久久 | 免费观看一级特黄欧美大片 | 久久国产精99精产国高潮 | 日本午夜在线视频 | 欧美日韩久久精品 | 欧美成人激情 | 久久亚洲欧美日韩精品专区 | 99久久99|