国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#基于TCP協議的服務器端和客戶端通信編程的基礎教程

2019-10-29 21:29:15
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C#基于TCP協議的服務器端和客戶端通信編程的基礎教程,文中講解了C#中TCP編程主要相關的TcpListener類與TcpClient類用法,需要的朋友可以參考下
 

運行在TCP之上常見的網絡應用協議有比如HTTP、FTP、SMTP、POP3、IMAP。
TCP是TCP/IP體系中最重要的傳輸協議,它提供全雙工和可靠交付的服務,是大多數應用協議工作的基礎。
TCP是一種面向連接(連接導向)的,可靠的,基于字節流的傳輸層通信協議。

 

TCP的工作過程

  • 建立連接
  • 傳輸數據
  • 連接的終止


TCP的主要特點
1.TCP是面向連接的協議
2.是端到端的通信。每個TCP連接只能有兩個端點,而且只能一對一通信,不能點對多的
的直接通信
3.高可靠性
4.全雙工方式傳輸
5.數據以字節流的方式傳輸
6.傳輸的數據無消息邊界

 

關于線程
利用TCP開發應用程序時,.net框架提供兩種工作方式,一種是同步工作方式,另一種是異步工作方式。
同步工作方式是指利用TCP編寫的程序執行到監聽或者接收語句,在未完成當前工作前不再。
繼續往下執行,線程處于阻塞狀態,直到該語句完成后才能繼續執行下一條語句。
異步工作方式是指程序執行到監聽或者接收語句時,無論當前工作是否完成,都會繼續往下執行。

 

TcpListener與TcpClient類常用方法與屬性

TCPListener類用于監聽客戶端連接請求,TCPClient類用于提供本地主機和遠程主機的連接信息。
兩個類都位于 System.Net.Socckets命名空間下。

1.TCPListener類常用的方法:

(1)AcceptSocket:從端口處接收一個連接并賦予它Socket對象
(2)AcceptTcpClient:從端口處接收一個連接并賦予它TCPClient對象
(3)Equals:判斷兩個TcpListener對象是否相等
(4)GetType:獲取當前實例的類型
(5)Pending :確定是否有掛起的連接請求
(6)Start:開始接聽傳入的連接請求
(7)Stop:關閉監聽器
(8)ToString:創建TcpListener對象的字符串表示


2.TcpClient常用的屬性與方法
屬性:
(1)Client:獲取或設置基礎套接字
(2)LingerState:獲取或設置套接字保持連接的時間
(3)NoDelay:獲取或設置一個值,該值在發送或接收緩存沖未滿時禁止延遲、
(4)ReceiveBufferSize:獲取或設置TCP接收緩存區的大小
(5)ReceiveTimetut:獲取或設置套接字接收數據的超時時間
(6)SendBufferSize:獲取或設置TCP發送緩存區的大小
(7)SendTimeout:獲取或設置套接字發送數據超時時間

方法:
(1)Close:釋放TcpClient實例,而不關閉基礎連接
(2)Connect:用指定的主機名和端口號將客戶端連接到TCP主機
(3)BeginConnect:開始一個遠程主機連接的異步請求
(4)GetStream:獲取能夠發送和接收數據的NetworkStream對象

TCP編程的一般步驟
1.網絡通信的最基本的前提就是客戶端要先和服務器建立TCP連接
2.服務端要不斷的監聽客戶端是否有連接請求、并且服務端能要識別特定的客戶端
3.連接并創建對應的套接字
4.發送數據和接收數據


編寫服務器端程序的一般步驟
1.創建一個TcpListener對象,然后調用該對象的Start方法在指定的端口進行監聽
2.在單獨的線程中,首先循環調用AcceptTcpClient方法接收客戶端的連接請求
,從該方法中的返回結果中得到與該客戶端對應的TcpClient對象,并利用該對象
的GetStream方法得到NetworkStream。然后再利用該對象得到其他使用更方便的
對象,比如BinaryReader對象、BinaryWrite對象,為進一步與對方通信做準備。
3.每得到一個新的TcpClient對象,就創建一個與客戶對應的線程,在線程與對應的
客戶進行通信。
4.根據傳送信息的情況確定是否關閉與客戶連接。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net.Sockets; using System.Net; using System.IO;  namespace TCP {   public partial class TcpListenerTest : Form   {     public TcpListenerTest()     {       InitializeComponent();     }     //聲明     private IPAddress localAddress;// IP地址 IPAddress類 在命名空間 using System.Net下     private const int port = 58080;//端口     private TcpListener tcpListener;//監聽套接字 TcpLestener與TcpClient類 在命名空間 using System.Net.Sockets下     private TcpClient tcpClient;//服務端與客戶端建立連接     private NetworkStream newworkStream;//利用NetworkStream對象與遠程主機發送數據或接收數據/     private BinaryReader binaryReader;//讀取 BinaryReader與BinaryWriter類在命名空間using System.IO下     private BinaryWriter binaryWrite;//寫入     private void Form1_Load(object sender, EventArgs e)     {       IPAddress[] listenerIp = Dns.GetHostAddresses("www.baidu.com");//返回主機指定的IP地址       localAddress = listenerIp[0]; //初始化IP地址為本地地址       tcpListener = new TcpListener(localAddress,port);//創建TcpListener對象       tcpListener.Start();//開始監聽        Thread thread = new Thread(AcceptClientConnect);//啟動一個線程接收請求       thread.Start();//啟動線程     }     //發起請求     private void AcceptClientConnect()     {        while(true)       {         try         {           tcpClient = tcpListener.AcceptTcpClient();//從端口接收一個連接,并賦予它TcpClient對象           if (tcpClient != null)           {             newworkStream = tcpClient.GetStream();             binaryReader = new BinaryReader(newworkStream);             binaryWrite = new BinaryWriter(newworkStream);           }          }         catch         {           break;         }       }     }   } } 

TCP編程 客戶端程序一般步驟
1.利用TcpClient的構造函數創建一個TcpClient對象
2.使用Connect方法與服務器建立連接
3.利用TcpClient對象的GetStream對象得到網絡流,然后利用該網絡流與服務器進行數據傳輸
4.創建一個線程監聽指定的端口,循環接收并處理服務器發送過來的信息。
5.完成工作之后,想服務器發送關閉信息,并關閉與服務器的連接。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Net; using System.IO;  namespace TCP {   public partial class TcpClientTest : Form   {     public TcpClientTest()     {       InitializeComponent();     }     private TcpClient tcpClient;//聲明     private IPAddress iAdress;//IP地址     private const int port=58080; //端口      private NetworkStream networkStream;//網絡流     private BinaryReader binayRead;//讀取     private BinaryWriter binayWrite;//寫入     private void TcpClient_Load(object sender, EventArgs e)     {       IPAddress[] ipAddress = Dns.GetHostAddresses("www.baidu.com");//返回主機指定的IP地址       iAdress = ipAddress[0]; //初始化IP地址為本地地址       IPEndPoint ipoint = new IPEndPoint(iAdress,port);//將網絡端點表示為IP和端口號       tcpClient = new TcpClient(ipoint);//實例化TcpClient類       //最方便 TcpClient tcpClient=new TcpClient("www.baidu.com",port);        if (tcpClient != null)       {         networkStream = tcpClient.GetStream();//得到網絡流         binayRead = new BinaryReader(networkStream);         binayWrite = new BinaryWriter(networkStream);       }     }      private void ReMessage()     {       while (true)       {         try         {           string rcMsg = binayRead.ReadString();//從網絡流中讀取數據           if (rcMsg != null)           {             MessageBox.Show(rcMsg);           }           else           {             break;           }         }         catch         {           }       }     }   } } 
 


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 锡林浩特市| 千阳县| 富平县| 彭阳县| 嘉定区| 罗平县| 蒙山县| 盐池县| 中西区| 平谷区| 盐山县| 寿宁县| 建德市| 抚宁县| 汤原县| 深州市| 吴川市| 方正县| 吴忠市| 东方市| 高碑店市| 高青县| 肃南| 达拉特旗| 古丈县| 眉山市| 蒙自县| 察哈| 乌兰浩特市| 黎城县| 瓮安县| 读书| 兴海县| 工布江达县| 崇左市| 天峻县| 葵青区| 手游| 漳浦县| 芒康县| 和林格尔县|