欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C# 實(shí)現基本的套接字TCP通信

在C#中,實(shí)現了很多對Windows  API的封裝,在套接字通信方面也是如此。下面是一個(gè)TCP網(wǎng)絡(luò )通信的簡(jiǎn)單實(shí)例,因為自己初學(xué)C#,記下來(lái)學(xué)習

使用名字空間

using System.Net;

using System.Net.Sockets;

服務(wù)器端:

五個(gè)步驟:

(1) 創(chuàng )建一個(gè)TcpListener類(lèi)的對象,也叫“偵聽(tīng)器”,通過(guò)它,服務(wù)器能監聽(tīng)到客戶(hù)的請求。

下面是TcpListener構造函數的3種實(shí)現:

TcpListener(Int32)        在指定端口號進(jìn)行監聽(tīng),現在比較少用

TcpListener(IPEndPoint)       綁定端點(diǎn)(包括IP和端口號)

TcpListener(IPAddress, Int32)       綁定IP和端口號

IPAddress類(lèi)有一個(gè)方法Parse(),可以將IP 地址字符串轉換為IPAddress 實(shí)例。

TcpListener類(lèi)封裝了套接字的創(chuàng )建(socket)和綁定(bind),簡(jiǎn)化了編程的輸入

(2) 調用TcpListener類(lèi)的Start()方法。該方法可以使TcpListenerduixiang開(kāi)始監聽(tīng)連接請求。

(3) 方法AcceptSock()可以接收來(lái)自客戶(hù)端的連接請求。該方法返回一個(gè)Socket類(lèi)的對象,該對象是實(shí)現與客戶(hù)端通信的套接字;

(4) 調用Sockets類(lèi)的Receive和Send方法來(lái)通信;

(5) 使用Socket對象的Close()方法關(guān)閉連接;

      使用TcpListener類(lèi)的Stop()方法關(guān)閉偵聽(tīng)器。

客戶(hù)端:

五個(gè)步驟:

(1) 創(chuàng )建一個(gè)TcpClient類(lèi)的對象

TcpClient()   初始化 TcpClient 類(lèi)的新實(shí)例。

TcpClient(AddressFamily)      使用指定的族初始化 TcpClient 類(lèi)的新實(shí)例。

TcpClient(IPEndPoint)     初始化 TcpClient 類(lèi)的新實(shí)例,并將其綁定到指定的本地終結點(diǎn)。

TcpClient(String, Int32)     初始化 TcpClient 類(lèi)的新實(shí)例并連接到指定主機上的指定端口。

(2) 使用TcpClient類(lèi)的Connect方法建立與服務(wù)器的連接。

疑惑:這里的Connect方法同樣可以實(shí)現與指定IP和端口的服務(wù)器連接,那TcpClient類(lèi)的構建函數中就沒(méi)必要指定IP和端口了

(實(shí)際上,在下面的例子中,創(chuàng )建TcpClient對象時(shí),并沒(méi)有傳參數)

(3) 使用TcpClient的GetStream()方法來(lái)得到一個(gè)用于發(fā)送和接收數據的NetworkStream對象。

NetworkStream的WriteByte和Write方法分別能夠用于向服務(wù)器輸出單字節或一組字節;ReadByte和Read方法分別能從服務(wù)器讀取單字節或一組字節;

public override void Write(	byte[] buffer,	int offset,	int size)

參數解析:

buffer:類(lèi)型 Byte 的數組,該數組包含要寫(xiě)入 NetworkStream 的數據。

offset:buffer 中開(kāi)始寫(xiě)入數據的位置,一般取0;

size:要寫(xiě)入 NetworkStream 的字節數,取值為buffer.Length-offset。

(當offset=0時(shí),size=buffer.Length)

Read()方法類(lèi)似,不單做解釋?zhuān)?/p>

(4) 使用NetworkStream對象的WriteByte,Write,ReadByte,Read方法與服務(wù)器進(jìn)行通信;

(5) 調用NetworkStream的Close方法來(lái)關(guān)閉連接;接著(zhù)調用TcpClient類(lèi)的Close()方法來(lái)終止TCP連接。

注意事項:

無(wú)論是Socket類(lèi)的Receive()或Send()方法,還是NetworkStream的Read()或Write()方法,都是直接讀寫(xiě)Byte[]類(lèi)型的變量,而我們習慣使用string類(lèi)型的變量

使用如下轉換:

字節數組到字符串:

Encoding.ASCII.GetString()

public virtual string GetString(	byte[] bytes)

輸入byte[]類(lèi)型變量,輸出string類(lèi)型變量;

字符串到字節數組:

Encoding.ASCII.GetBytes()

public virtual byte[] GetBytes(	string s)

輸入string類(lèi)型變量,輸出byte[]類(lèi)型變量;

 代碼實(shí)現:

實(shí)現功能:客戶(hù)端向服務(wù)器發(fā)送信息,服務(wù)器在控制臺顯示接收到的信息;

服務(wù)器端:


 

namespace tcplistenerTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string srvIP = "127.0.0.1";
            IPAddress srvAddr = IPAddress.Parse(srvIP);
            int nPort = 2030;
            //創(chuàng )建并綁定套接字
            TcpListener srvLstner = new TcpListener(srvAddr, nPort);

            //開(kāi)始監聽(tīng)
            try
            {
                srvLstner.Start(5);
            }
            catch (SocketException e)
            {
                Console.WriteLine(e.Message);
                srvLstner.Stop();
                Console.ReadLine();
                return;
            }
            //接受客戶(hù)端連接請求
            while (true)
            {
                //接收連接請求
                Socket remoteSock = srvLstner.AcceptSocket();

                //顯示客戶(hù)端發(fā)送過(guò)來(lái)的消息
                Byte[] recvBuf = new Byte[128];
                try
                {
                    remoteSock.Receive(recvBuf);
                }
                catch (SocketException e)
                {
                    Console.WriteLine(e.Message);
                    break;
                }
                string recvMsg = Encoding.ASCII.GetString(recvBuf);
                Console.WriteLine(recvMsg);

                remoteSock.Close();
            }

            srvLstner.Stop();
        }
    }
}


 

 
客戶(hù)端:

 
namespace TcpClientTest
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient tcpClient = new TcpClient();
            IPAddress srvAddr = IPAddress.Parse("127.0.0.1");
            int nPort = 2030;
            //連接到服務(wù)器
            try
            {
                tcpClient.Connect(srvAddr, nPort);
            }
            catch (SocketException e)
            {
                Console.WriteLine(e.Message);
                tcpClient.Close();
                Console.ReadLine();
                return;
            }
            NetworkStream sockStream = tcpClient.GetStream();
            string sendMsg = "hello, srver! This is client A";
            Byte[] sendBuf = Encoding.ASCII.GetBytes(sendMsg);
            try
            {
                sockStream.Write(sendBuf, 0, sendBuf.Length);
            }
            catch (SocketException e)
            {
                Console.WriteLine(e.Message);
                sockStream.Close();
                tcpClient.Close();
                Console.ReadLine();
                return;
            }
            Console.WriteLine("成功向服務(wù)器發(fā)送消息:{0}\n", sendMsg);
            sockStream.Close();
            tcpClient.Close();
            Console.ReadLine();
        }
    }
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
用C#實(shí)現基于TCP協(xié)議的網(wǎng)絡(luò )通訊--51編程網(wǎng)
C# .net2.0 套接字編程實(shí)例 UDP TCP通信
你也可以寫(xiě)個(gè)聊天程序
C# TCP通訊示例
使用 AcceptTcpClientAsync 進(jìn)行 異步 操作
C#網(wǎng)絡(luò )編程(基本概念和操作) - Part.1 - C# 編程 - TraceFact....
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久