前言:
此时咱们对“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界面库