1. 程式人生 > >2018-09-21 基於C#的本地伺服器和客服端

2018-09-21 基於C#的本地伺服器和客服端

                                                 基於C#的本地伺服器和客服端

下面來實現本地的伺服器 首先建立一個伺服器專案 1. 程式碼如下


先引用類庫
using System.Net;

using System.Net.Sockets;

在main中實現呼叫
static void Main(string[] args)

        {

            SocketClient client = new SocketClient();

            while (true)

            {

                string msg=  Console.ReadLine();

                client.Send(msg);

            }

      }

再寫一個類SocketClient類來實現非同步 程式碼如下

public const int bufferSize = 8192;
        TcpClient client;
        NetworkStream stream;
        byte[] buffer = new byte[bufferSize];
        public SocketClient(TcpClient _client)
        {
            client = _client;
            Console.WriteLine("客服端連結成功" + client.Client.RemoteEndPoint);
            stream = client.GetStream();
            stream.BeginRead(buffer, 0, bufferSize, Read, null);
        }
        void Read(IAsyncResult ar)
        {
            try
            {
                int readCount = stream.EndRead(ar);
                string msg = Encoding.UTF8.GetString(buffer, 0, readCount);
                Console.WriteLine("接收到客服端"+client.Client.RemoteEndPoint+"訊息"+msg);

                lock (client)
                {
                    Array.Clear(buffer, 0, bufferSize);
                    stream.BeginRead(buffer, 0, bufferSize, Read, null);

                }

            }
            catch (Exception e)

            {
                Console.WriteLine(e.ToString());
            
        }

這樣就配置好了伺服器 接下來實現客服端: 在建立一個專案叫做客服端Client


先引用類庫
using System.Net;

using System.Net.Sockets;

在main中實現呼叫
 static void Main(string[] args)
        {
            SocketClient client = new SocketClient();
            while (true)
            {
                string msg=  Console.ReadLine();
                client.Send(msg);
            }
        }

也是再寫一個SocketClient類來實現非同步

 class SocketClient
    {
        string ip = "127.0.0.1";
        int port = 8500;
        TcpClient client;
        NetworkStream stream;
        public const int bufferSize = 8192;
        byte[] buffer = new byte[bufferSize];
        public SocketClient()
        {
            client = new TcpClient();
            client.Connect(ip, port);
            Console.WriteLine("伺服器連結成功" + client.Client.RemoteEndPoint);
            stream = client.GetStream();
            stream.BeginRead(buffer, 0, bufferSize, Read, null);

        }

        void Read(IAsyncResult ar)
        {
            try
            {
                int readCount = stream.EndRead(ar);
                string msg = Encoding.UTF8.GetString(buffer, 0, readCount);
                Console.WriteLine("接收到客服端" + client.Client.RemoteEndPoint + "訊息" + msg);

                lock (client)
                {
                    Array.Clear(buffer, 0, bufferSize);
                    stream.BeginRead(buffer, 0, bufferSize, Read, null);
                }

            }
            catch (Exception e)
            {

                Console.WriteLine(e.ToString());
            }
        }
      
        public void Send(string msg)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(msg);
            stream.Write(bytes, 0, bytes.Length);
        }
    }

接下來 就是呼叫了 先開啟伺服器 在用Ctrl+F5來開啟多個客服端: 如圖圖片1.png 接著在客服端輸入資訊 會分別得到。 圖片2.png

這樣我們就實現了本地的伺服器與客服端的連線。