簡體   English   中英

我需要一些幫助來了解此C#套接字代碼

[英]I need some help understanding this C# socket code

我目前正在嘗試學習C#的網絡連接,然后我就開始使用套接字了。

我現在閱讀了一些指南,發現了一個不錯的和易於理解的指南,但是現在他們向我提供了用於服務器插座的代碼,並且在理解某些段落方面有些困難

碼:

    public void startServer()
    {

        TcpListener serverSocket = new TcpListener(8888);
        TcpClient clientSocket = default(TcpClient);
        serverSocket.Start();
        Console.WriteLine(" >> Server Started");
        clientSocket = serverSocket.AcceptTcpClient();
        Console.WriteLine(" >> Accept connection from client");

        while ((true))
        {
            try
            {
                NetworkStream networkStream = clientSocket.GetStream();
                byte[] bytesFrom = new byte[10025];
                networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
                string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
                dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
                Console.WriteLine(" >> Data from client - " + dataFromClient);
                string serverResponse = "Last Message from client" + dataFromClient;
                Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
                networkStream.Write(sendBytes, 0, sendBytes.Length);
                networkStream.Flush();
                Console.WriteLine(" >> " + serverResponse);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        clientSocket.Close();
        serverSocket.Stop();
        Console.WriteLine(" >> exit");
        Console.ReadLine();
    }

首先,很明顯一開始發生了什么。 正在創建一個TcpListener,它表示服務器套接字。

但是,有些混亂從TcpClient部分開始。 如果這應該是服務器,為什么我必須已經在這里創建客戶端? 考慮到服務器應該獨立運行,服務器和客戶端方法不應該分開嗎?

然后,在try catch中,為什么要使用NetworkStream = clientsocket.GetStream(); 我在這里可能完全錯了,但是為什么我必須從客戶那里獲取信息流? 這行聽起來像是服務器需要定期更新。 還是要在服務器“收集”之前將要傳輸的信息/消息存儲在客戶端中?

字節數組應該存儲一條消息,這是我很確定的。

只要我仍然對其他部分感到困惑,我就不能對try塊中的其他語句說太多。 但總的來說,服務器似乎在這里建立與客戶端的連接,並雙向發送/接收消息。

我在網絡或套接字技術上並沒有真正的先進性(說實話,我從剛開始就一點都不陌生),因此,如果在這里做出一些錯誤的假設,我感到抱歉,但是我確實在嘗試獲取此代碼段代碼沒有任何解釋。

如果有人能使我明白這段代碼,我將非常感激。

對我來說似乎是一個混合解決方案。 通常, TcpListener listener = new TcpListener(8888)等待給定端口上的連接。

然后,當它接受來自客戶端的連接時,它將在不同的套接字上建立連接Socket socket = listener.AcceptSocket()以便偵聽端口仍在等待其他連接(另一個客戶端)。

然后,我們可以從流中連接到服務器的客戶端讀取: Stream stream = NetworkStream(socket)

TcpClient用於連接到這樣的服務器,並且應在客戶端應用程序中使用,而不是在服務器一中使用。

客戶一詞有兩個定義。 在應用程序級別,您有一個客戶端和服務器應用程序。 客戶端是主服務器,服務器是從服務器。 在套接字級別,客戶端應用程序和服務器應用程序都具有客戶端(也稱為套接字)。 服務器套接字偵聽回送地址127.0.0.1(或IPAny)。 當客戶端套接字連接到服務器IP地址時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM