龙空技术网

Tcp Socket 多客户端处理

编程行者 98

前言:

此时咱们对“vbnetsockettcp”都比较珍视,小伙伴们都想要剖析一些“vbnetsockettcp”的相关内容。那么小编在网络上搜集了一些对于“vbnetsockettcp””的相关内容,希望你们能喜欢,同学们快快来学习一下吧!

多客户端处理是在Echo的基础上做了升级,使其可以对多个客户端进行响应。

这次修改的方向有两个,一个是去除两个实例中的重复代码,对套接字函数的调用做一个初步封装,另一个是新建可以处理多个客户端的服务端项目。

添加一个公用类库,命名为Echo.Tcp,供实例项目调用,在库中新建一个封装类TcpSocket,对外开放三个函数:Listen,Connect,Send。

Listen函数体代码:

Socket s = CreateSocket();IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port);s.Bind(endPoint);s.Listen(10);Console.WriteLine("开始监听,等待客户端连接...");Task.Factory.StartNew(() =>{  while (true)     {       Socket client = s.Accept();       Recv(client);             }    });      

其中启动一个任务,在Accept处阻塞任务等待连接,连接建立后将新的Socket对象投入到Recv中立即返回,等待下一个连接,以此并行处理多个连接的数据交互, Recv的实现如下:

byte[] buf = new byte[1024];            Task.Factory.StartNew(() =>            {                while (true)                {                    int rcvLen = s.Receive(buf);                    string msg = Encoding.UTF8.GetString(buf.Take(rcvLen).ToArray());                    Console.WriteLine($"接收到客户端的数据:{msg}");                    s.Send(buf.Take(rcvLen).ToArray());                }            });

Recv中为每一个新的连接启动一个接收数据的任务,其中的处理逻辑就是获取到客户端数据,输出到控制台并回写给客户端。

Connect由客户端调用向服务端发起连接请求,实现代码如下:

Socket s = CreateSocket();s.Connect(CreateEndPoint(port, ip));return s;

Send函数用来发送数据,该函数可以将调用者提供的内容转化为字节数组发送出去

byte[] buf = Encoding.UTF8.GetBytes(msg);s.Send(buf);

服务端的调用也很简单:

TcpSocket server = new TcpSocket();server.Listen(8800);Console.WriteLine("多客户端响应服务已启动...");Console.Read();

至此,多客户端响应的处理已经完成,并且初步封装了一个共用的Socket操作库,具体源代码可以到github中查看,地址:「链接」

标签: #vbnetsockettcp #vbnetsocket界面库