首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 同步網路傳輸字串實作 (6/6):客戶端互動選單與收發迴圈

     編輯:關於C語言

客戶端完整程式碼

class Client
{
    static void Main()
    {
        Console.WriteLine("Client Running ...");
        TcpClient client;
        ConsoleKey key;
        const int BufferSize = 8192;

        try { client = new TcpClient(); client.Connect("localhost", 8500); }
        catch (Exception ex) { Console.WriteLine(ex.Message); return; }

        Console.WriteLine("Server Connected! {0} --> {1}",
            client.Client.LocalEndPoint, client.Client.RemoteEndPoint);

        NetworkStream stream = client.GetStream();
        Console.WriteLine("Menu: S - Send, X - Exit");

        do
        {
            key = Console.ReadKey(true).Key;
            if (key == ConsoleKey.S)
            {
                Console.Write("Input the message: ");
                string msg = Console.ReadLine();

                byte[] buffer = Encoding.Unicode.GetBytes(msg);
                lock (stream) { stream.Write(buffer, 0, buffer.Length); }
                Console.WriteLine("Sent: {0}", msg);

                buffer = new byte[BufferSize];
                int bytesRead;
                lock (stream) { bytesRead = stream.Read(buffer, 0, BufferSize); }
                msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);
                Console.WriteLine("Received: {0}", msg);
            }
        } while (key != ConsoleKey.X);

        stream.Dispose(); client.Close();
        // 按 Q 退出...
    }
}

關鍵細節

  • lock(stream):NetworkStream 非執行緒安全,單執行緒此處非必要,但習慣加上為多執行緒擴展鋪路。
  • Encoding.Unicode:雙端統一編碼,支援中文。
  • 固定 BufferSize=8192:簡化範例,實務應依協定解析訊息邊界 (長度前綴、分隔符等)。
  • 選單迴圈:S 發送、X 結束。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved