美文网首页
2018-09-21

2018-09-21

作者: 初音控 | 来源:发表于2018-09-21 15:51 被阅读6次
                                                 基于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

这样我们就实现了本地的服务器与客服端的连接。

相关文章

网友评论

      本文标题:2018-09-21

      本文链接:https://www.haomeiwen.com/subject/omzanftx.html