自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#實(shí)現(xiàn)局域網(wǎng)點(diǎn)對(duì)點(diǎn)淺析

開(kāi)發(fā) 后端
這里介紹當(dāng)然在具體用Visual C#實(shí)現(xiàn)局域網(wǎng)點(diǎn)對(duì)點(diǎn)通訊程序時(shí),還必須掌握很多其他方面的知識(shí),如資源的回收。

在向大家詳細(xì)介紹C#實(shí)現(xiàn)局域網(wǎng)點(diǎn)對(duì)點(diǎn)通訊程序之前,首先讓大家了解下程序的設(shè)計(jì)、調(diào)試、運(yùn)行的軟件環(huán)境,然后全面介紹C#實(shí)現(xiàn)局域網(wǎng)點(diǎn)對(duì)點(diǎn)通訊程序。

用Visual C#實(shí)現(xiàn)局域網(wǎng)點(diǎn)對(duì)點(diǎn)通訊程序,就有如下特點(diǎn),在網(wǎng)絡(luò)利用此通訊程序進(jìn)行通訊的任一計(jì)算機(jī),在通訊之前,都需要偵聽(tīng)端口號(hào),接受其他機(jī)器的連接申請(qǐng),并在連接建立后,就可以接收對(duì)方發(fā)送來(lái)的數(shù)據(jù);同時(shí)也可以向其他機(jī)器提出連接申請(qǐng),并在對(duì)方計(jì)算機(jī)允許建立連接請(qǐng)求后,發(fā)送數(shù)據(jù)到對(duì)方??梢?jiàn)在網(wǎng)絡(luò)中利用此軟件進(jìn)行P2P網(wǎng)絡(luò)通訊的任一計(jì)算機(jī)既是客戶機(jī),同樣也是服務(wù)器。

一.程序的設(shè)計(jì)、調(diào)試、運(yùn)行的軟件環(huán)境:
1.微軟公司視窗2000服務(wù)器版
2.Visual Studio .Net正式版,.Net FrameWork SDK版本號(hào)3705

二.關(guān)鍵步驟及其解決方法:

關(guān)鍵步驟就是實(shí)現(xiàn)信息在網(wǎng)絡(luò)中的發(fā)送和接收。數(shù)據(jù)接收使用的是Socket,數(shù)據(jù)發(fā)送使用的是NetworkStream。

1.利用Socket來(lái)接收信息:

為了更清楚的說(shuō)明問(wèn)題,程序在處理數(shù)據(jù)發(fā)送和接收時(shí)采用了不通的端口號(hào),發(fā)送數(shù)據(jù)程序在缺省狀態(tài)設(shè)定的端口號(hào)為"8889"。下面代碼是偵聽(tīng)端口號(hào)"8889",接受網(wǎng)絡(luò)中對(duì)此端口號(hào)的連接請(qǐng)求,并在建立連接后,通過(guò)Socket接收遠(yuǎn)程計(jì)算機(jī)發(fā)送來(lái)的數(shù)據(jù):

  1. try  
  2. {  
  3. TcpListener tlListen1 = new TcpListener ( 8889 ) ;  
  4. //偵聽(tīng)端口號(hào)  
  5. tlListen1.Start ( ) ;  
  6. Socket skSocket = tlListen1.AcceptSocket ( );  
  7. //接受遠(yuǎn)程計(jì)算機(jī)的連接請(qǐng)求,并獲得用以接收數(shù)據(jù)的Socket實(shí)例  
  8. EndPoint tempRemoteEP = skSocket.RemoteEndPoint;  
  9. //獲得遠(yuǎn)程計(jì)算機(jī)對(duì)應(yīng)的網(wǎng)絡(luò)遠(yuǎn)程終結(jié)點(diǎn)  
  10. while (true)  
  11. {  
  12. Byte [] byStream = new Byte[80];  
  13. //定義從遠(yuǎn)程計(jì)算機(jī)接收到數(shù)據(jù)存放的數(shù)據(jù)緩沖區(qū)  
  14. int i = skSocket.ReceiveFrom(byStream,ref tempRemoteEP);  
  15. //接收數(shù)據(jù),并存放到定義的緩沖區(qū)中  
  16. string sMessage = System.Text.Encoding.UTF8.GetString(byStream);  
  17. //以指定的編碼,從緩沖區(qū)中解析出內(nèi)容  
  18. MessageBox.Show ( sMessage );  
  19. //顯示傳送來(lái)的數(shù)據(jù)  
  20. }  
  21. }  
  22. catch ( System.Security.SecurityException )  
  23. {  
  24. MessageBox.Show ( "防火墻安全錯(cuò)誤!","錯(cuò)誤",  
  25. MessageBoxButtons.OK , MessageBoxIcon.Exclamation);  

2.利用NetworkStream來(lái)傳送信息:

在使用StreamWriter處理NetworkStream傳送數(shù)據(jù)時(shí),數(shù)據(jù)傳送的編碼類型是"UTF8",下列代碼是對(duì)IP地址為"10.138.198.213"的計(jì)算機(jī)的"8888"端口號(hào)提出連接申請(qǐng),并在連接申請(qǐng)建立后,以UTF8編碼發(fā)送字符串"您好,見(jiàn)到您很高興"到對(duì)方,由于下列代碼中的注釋比較詳細(xì),這里就不具體介紹了,下列代碼也是使用 NetworkStream傳送數(shù)據(jù)的典型代碼:

  1. try  
  2. {  
  3. TcpClient tcpc = new TcpClient ("10.138.198.213",8888);  
  4. //對(duì)IP地址為"10.138.198.213"的計(jì)算機(jī)的8888端口提出連接申請(qǐng)  
  5. NetworkStream tcpStream = tcpc.GetStream ( );  
  6. //如果連接申請(qǐng)建立,則獲得用以傳送數(shù)據(jù)的數(shù)據(jù)流  
  7. }  
  8. catch ( Exception )  
  9. {  
  10. MessageBox.Show ( "目標(biāo)計(jì)算機(jī)拒絕連接請(qǐng)求!" ) ;  
  11. break ;  
  12. }  
  13. try  
  14. {  
  15. string sMsg = "您好,見(jiàn)到您很高興" ;  
  16. StreamWriter reqStreamW = new StreamWriter (tcpStream);  
  17. //以特定的編碼往向數(shù)據(jù)流中寫(xiě)入數(shù)據(jù) ,默認(rèn)為UTF8編碼  
  18. reqStreamW.Write (sMsg);  
  19. //將字符串寫(xiě)入數(shù)據(jù)流中  
  20. reqStreamW.Flush ( );  
  21. //清理當(dāng)前編寫(xiě)器的所有緩沖區(qū),并使所有緩沖數(shù)據(jù)寫(xiě)入基礎(chǔ)流  
  22. }  
  23. catch(Exception)  
  24. {  
  25. MessageBox.Show ("無(wú)法發(fā)送信息到目標(biāo)計(jì)算機(jī)!") ;  

當(dāng)然在具體用Visual C#實(shí)現(xiàn)局域網(wǎng)點(diǎn)對(duì)點(diǎn)通訊程序時(shí),還必須掌握很多其他方面的知識(shí),如資源的回收。在用Visual C#編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序的時(shí)候,很多朋友遇到這樣的情況。當(dāng)程序退出后,通過(guò)Windows的" 資源管理器"看到的是進(jìn)程數(shù)目并沒(méi)有減少。這是因?yàn)槌绦蛑惺褂玫木€程可能并沒(méi)有有效退出。雖然Thread類中提供了"Abort"方法用以中止進(jìn)程,但并不能夠保證成功退出。因?yàn)檫M(jìn)程中使用的某些資源并沒(méi)有回收。在某些情況下垃圾回收器也不能保證完全的回收資源,還是需要我們自己手動(dòng)回收資源的。在本文介紹的程序中也涉及到資源手動(dòng)回收的問(wèn)題。實(shí)現(xiàn)方法可參閱下面具體實(shí)現(xiàn)步驟中的第十二步。

【編輯推薦】

  1. C#創(chuàng)建表單簡(jiǎn)單介紹
  2. C#修改DataReader默認(rèn)行為
  3. C#設(shè)置CooperativeLevel概述
  4. C#表單增加控件簡(jiǎn)單描述
  5. C# EmployeePlug類概述
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-02-04 09:11:00

VistaXP局域網(wǎng)互連

2010-01-22 15:59:19

2010-03-16 16:57:07

局域網(wǎng)交換機(jī)

2009-11-20 11:13:31

2009-08-15 16:06:00

局域網(wǎng)VLAN

2009-09-17 13:44:19

2010-09-17 09:04:10

2011-07-28 14:10:46

路由器局或網(wǎng)

2009-08-15 17:01:46

2009-09-03 14:49:49

C#實(shí)現(xiàn)網(wǎng)絡(luò)點(diǎn)對(duì)點(diǎn)

2010-01-12 16:55:40

交換機(jī)怎樣設(shè)置

2020-04-21 14:53:35

LinuxPython數(shù)據(jù)

2009-09-01 18:29:24

C#實(shí)現(xiàn)多個(gè)接口

2009-08-31 16:48:02

C#實(shí)現(xiàn)IDispos

2009-09-02 15:34:37

C#實(shí)現(xiàn)插件構(gòu)架

2010-08-30 11:02:04

2009-08-26 09:54:45

C#打印預(yù)覽C#打印

2009-08-13 18:15:06

C#繼承構(gòu)造函數(shù)

2009-08-28 16:03:15

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

2009-09-02 17:24:44

C#關(guān)機(jī)代碼
點(diǎn)贊
收藏

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