2018-09-21

                                                 基于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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小程序面试题 小程序授权登录流程 0、如何获得用户信息...
    X秀秀阅读 1,833评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • 现代大都市,互联网行业是迅猛发展。这样一来,就推动了自媒体这个行业迅速发展。那么新兴的自媒体也是有很多。比如今日头...
    刘威威威阅读 2,513评论 0 50
  • 不知道以后的某一天,我会不会向生活妥协。至少现在在我所能承受的能力之内,还在貌似昂首挺胸的坚持着。
    朝辞z阅读 137评论 0 0