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

C#服務(wù)端程序?qū)崿F(xiàn)同步傳輸字符串淺析

開(kāi)發(fā) 后端
C#服務(wù)端程序?qū)崿F(xiàn)同步傳輸字符串是如何辦到的呢?C#服務(wù)端程序?qū)崿F(xiàn)同步傳輸字符串需要注意的是什么呢?那么本文就向你介紹這方面的內(nèi)容。

C#服務(wù)端程序?qū)崿F(xiàn)同步傳輸字符串問(wèn)題的由來(lái):我們可以在TcpClient上調(diào)用GetStream()方法來(lái)獲得連接到遠(yuǎn)程計(jì)算機(jī)的流。注意這里我用了遠(yuǎn)程這個(gè)詞,當(dāng)在客戶端調(diào)用時(shí),它得到連接服務(wù)端的流;當(dāng)在服務(wù)端調(diào)用時(shí),它獲得連接客戶端的流。接下來(lái)我們來(lái)看一下代碼,我們先看服務(wù)端(注意這里沒(méi)有使用do/while循環(huán)):

C#服務(wù)端程序?qū)嵗?/P>

  1. //C#服務(wù)端程序  
  2. class Server {  
  3. static void Main(string[] args) {  
  4. const int BufferSize = 8192;// 緩存大小,8192字節(jié)  
  5.  
  6. Console.WriteLine("Server is running ... ");  
  7. IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });  
  8. TcpListener listener = new TcpListener(ip, 8500);  
  9.  
  10. listener.Start();   // 開(kāi)始偵聽(tīng)  
  11. Console.WriteLine("Start Listening ...");  
  12. //C#服務(wù)端程序  
  13. // 獲取一個(gè)連接,中斷方法  
  14. TcpClient remoteClient = listener.AcceptTcpClient();  
  15. // 打印連接到的客戶端信息  
  16. Console.WriteLine("Client Connected!{0} <-- {1}",  
  17. remoteClient.Client.LocalEndPoint,  
  18.  remoteClient.Client.RemoteEndPoint);  
  19.  
  20. // 獲得流,并寫(xiě)入buffer中  
  21. NetworkStream streamToClient = remoteClient.GetStream();  
  22. byte[] buffer = new byte[BufferSize];  
  23. int bytesRead = streamToClient.Read(buffer, 0, BufferSize);  
  24. Console.WriteLine("Reading data, {0} bytes ...", bytesRead);  
  25. //C#服務(wù)端程序  
  26. // 獲得請(qǐng)求的字符串  
  27. string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);  
  28. Console.WriteLine("Received: {0}", msg);  
  29. //C#服務(wù)端程序  
  30. // 按Q退出  
  31. }  

這段C#服務(wù)端程序的上半部分已經(jīng)很熟悉了,我就不再解釋。remoteClient.GetStream()方法獲取到了連接至客戶端的流,然后從流中讀出數(shù)據(jù)并保存在了buffer緩存中,隨后使用Encoding.Unicode.GetString()方法,從緩存中獲取到了實(shí)際的字符串。***將字符串打印在了控制臺(tái)上。這段代碼有個(gè)地方需要注意:在能夠讀取的字符串的總字節(jié)數(shù)大于BufferSize的時(shí)候會(huì)出現(xiàn)字符串截?cái)喱F(xiàn)象,因?yàn)榫彺嬷械臄?shù)目總是有限的,而對(duì)于大對(duì)象,比如說(shuō)圖片或者其它文件來(lái)說(shuō),則必須采用“分次讀取然后轉(zhuǎn)存”這種方式,比如這樣:

  1. // 獲取字符串  
  2. byte[] buffer = new byte[BufferSize];  
  3. int bytesRead;  // 讀取的字節(jié)數(shù)  
  4. MemoryStream msStream = new MemoryStream();  
  5. do {  
  6. bytesRead = streamToClient.Read(buffer, 0, BufferSize);  
  7. msStream.Write(buffer, 0, bytesRead);  
  8. while (bytesRead > 0);  
  9. //C#服務(wù)端程序  
  10. buffer = msStream.GetBuffer();  
  11. string msg = Encoding.Unicode.GetString(buffer); 

這里我沒(méi)有使用這種方法,一個(gè)是因?yàn)椴幌腙P(guān)注在太多的細(xì)節(jié)上面,一個(gè)是因?yàn)閷?duì)于字符串來(lái)說(shuō),8192字節(jié)已經(jīng)很多了,我們通常不會(huì)傳遞這么多的文本。當(dāng)使用Unicode編碼時(shí),8192字節(jié)可以保存4096個(gè)漢字和英文字符。使用不同的編碼方式,占用的字節(jié)數(shù)有很大的差異,在本文***面,有一段小程序,可以用來(lái)測(cè)試Unicode、UTF8、ASCII三種常用編碼方式對(duì)字符串編碼時(shí),占用的字節(jié)數(shù)大小。

現(xiàn)在對(duì)客戶端不做任何修改,然后運(yùn)行先運(yùn)行服務(wù)端,再運(yùn)行客戶端。結(jié)果我們會(huì)發(fā)現(xiàn)這樣一件事:服務(wù)端再打印完“Client Connected!127.0.0.1:8500 <-- 127.0.0.1:xxxxx”之后,再次被阻塞了,而沒(méi)有輸出“Reading data, {0} bytes ...”。可見(jiàn),與AcceptTcpClient()方法類似,這個(gè)Read()方法也是同步的,只有當(dāng)客戶端發(fā)送數(shù)據(jù)的時(shí)候,服務(wù)端才會(huì)讀取數(shù)據(jù)、運(yùn)行此方法,否則它便會(huì)一直等待。

C#服務(wù)端程序的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#服務(wù)端程序有所幫助。

【編輯推薦】

  1. C#服務(wù)端端口偵聽(tīng)淺析
  2. C#服務(wù)端與客戶端連接實(shí)現(xiàn)淺析
  3. C#服務(wù)端與客戶端連接實(shí)現(xiàn)淺談
  4. C#服務(wù)端與客戶端通信淺析
  5. C#服務(wù)端與客戶端通信詳解
責(zé)任編輯:仲衡 來(lái)源: 博客園
相關(guān)推薦

2009-08-21 16:37:54

C#客戶端程序

2009-08-21 14:25:23

C#異步傳輸字符串

2009-08-21 15:22:56

端口偵聽(tīng)

2009-08-21 15:36:41

服務(wù)端與客戶端

2009-08-21 14:33:15

C#異步傳輸字符串

2009-08-11 10:26:49

C#算法C#字符串反轉(zhuǎn)

2009-08-21 15:59:22

服務(wù)端與客戶端通信

2009-09-01 17:50:23

C#截取字符串

2009-09-02 13:41:57

C#字符串操作

2009-08-21 17:39:20

服務(wù)器端程序C#網(wǎng)絡(luò)編程

2009-09-03 18:45:06

GridView格式化

2009-08-21 15:54:40

服務(wù)端與客戶端

2009-08-21 17:53:25

C#網(wǎng)絡(luò)編程客戶端程序

2009-08-14 11:00:16

C#創(chuàng)建Windows

2009-08-28 16:03:15

C#程序?qū)崿F(xiàn)鼠標(biāo)移動(dòng)

2009-08-20 14:31:55

C#正則表達(dá)式字符串

2009-08-28 10:50:17

C#字節(jié)數(shù)組轉(zhuǎn)換成字符

2009-09-07 14:00:57

C#抓取網(wǎng)頁(yè)

2009-08-21 16:14:52

服務(wù)端與客戶端通信

2009-08-21 17:33:34

服務(wù)器端程序C#網(wǎng)絡(luò)編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲a视频 | 中文字幕日韩一区 | 精品一区二区免费视频 | 99综合| 香蕉婷婷 | 夜夜操天天操 | 日本一区二区三区四区 | 中文字幕日韩一区 | 久久久久国产一区二区三区 | 夜夜av| 日韩免费av网站 | 久久噜 | 亚洲乱码一区二区三区在线观看 | 亚洲风情在线观看 | 午夜精品网站 | 亚洲欧美综合精品久久成人 | 91传媒在线观看 | 亚洲视频免费在线播放 | 国产福利在线免费观看 | 国产高清免费 | 黑人性hd | 一区二区三区精品视频 | 欧美日本在线观看 | 日韩高清国产一区在线 | 精品久久一区二区 | 久草成人网 | 久久精品视频免费观看 | 99成人精品 | 国产精品视频在 | 亚洲精品一区二区冲田杏梨 | 成人自拍视频网站 | 超碰97免费在线 | 亚洲一区二区三区在线免费观看 | 国产一区二区免费 | 天堂久久网 | 欧美精品一区二区三区在线播放 | 二区在线观看 | 精品久久久久久久人人人人传媒 | 久久久久久黄 | 欧美黄视频 | 99久久99|