200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > unity网络实战开发(丛林战争)-前期知识准备(006-修改服务器端开启异步处理客户端连

unity网络实战开发(丛林战争)-前期知识准备(006-修改服务器端开启异步处理客户端连

时间:2020-08-07 12:52:27

相关推荐

unity网络实战开发(丛林战争)-前期知识准备(006-修改服务器端开启异步处理客户端连

使用工具:VS

使用语言:c#

作者:Gemini_xujian

参考:siki老师-《丛林战争》视频教程

继上一篇文章内容,这节课讲解一下修改服务器开启一步处理客户端连接请求。

先上代码:

服务器端:

using System;using System.Collections.Generic;using System.Linq;using ;//引入的命名空间using .Sockets;//引入的命名空间using System.Text;using System.Threading.Tasks;namespace C_Sharp游戏服务器端编程{class Program{static void Main(string[] args){StartReceiveAsync();Console.ReadKey();}static void StartReceiveAsync(){Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对象,第一个参数表示IP,第二个参数表示使用流(相当于管道),第三个参数表示使用tcp协议//IPAddress ipAdress = new IPAddress(new byte[] { 127,0,0,1 });IPAddress ipAdress = IPAddress.Parse("127.0.0.1");//创建一个ip地址IPEndPoint ipEndPoint = new IPEndPoint(ipAdress, 6789);serverSocket.Bind(ipEndPoint);//绑定IP和端口号serverSocket.Listen(0);//开始监听端口号,参数设置为0表示不对连接数做限制,填其他数字则表示最大连接数//Socket clientSocket = serverSocket.Accept();//接收一个客户端的连接serverSocket.BeginAccept(AcceptCallBack, serverSocket);}//异步连接客户端的回调函数static void AcceptCallBack(IAsyncResult ar){Socket serverSocket = ar.AsyncState as Socket;Socket clientSocket = serverSocket.EndAccept(ar);string msg = "hello 你好...";byte[] data = Encoding.UTF8.GetBytes(msg);//将字符串转换成byte数组clientSocket.Send(data);//向客户端发送一条信息clientSocket.BeginReceive(dataBuff, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);serverSocket.BeginAccept(AcceptCallBack, serverSocket);//继续处理下一个客户端的连接}static byte[] dataBuff = new byte[1024];static void ReceiveCallBack(IAsyncResult ar){Socket clientSocket = ar.AsyncState as Socket;int count = clientSocket.EndReceive(ar);Console.WriteLine(Encoding.UTF8.GetString(dataBuff),0,count);clientSocket.BeginReceive(dataBuff, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);}void StartReceiveSync(){Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对象,第一个参数表示IP,第二个参数表示使用流(相当于管道),第三个参数表示使用tcp协议//IPAddress ipAdress = new IPAddress(new byte[] { 127,0,0,1 });IPAddress ipAdress = IPAddress.Parse("127.0.0.1");//创建一个ip地址IPEndPoint ipEndPoint = new IPEndPoint(ipAdress, 6789);serverSocket.Bind(ipEndPoint);//绑定IP和端口号serverSocket.Listen(0);//开始监听端口号,参数设置为0表示不对连接数做限制,填其他数字则表示最大连接数Socket clientSocket = serverSocket.Accept();//接收一个客户端的连接string msg = "hello 你好...";byte[] data = Encoding.UTF8.GetBytes(msg);//将字符串转换成byte数组clientSocket.Send(data);//向客户端发送一条信息byte[] dataBuffer = new byte[1024];//创建一个byte数组用来接收数据int count = clientSocket.Receive(dataBuffer);//接收客户端发送过来的数据,返回值是数据长度string msgReceive = Encoding.UTF8.GetString(dataBuffer, 0, count);//将接收到的byte数组转换成字符串Console.WriteLine(msgReceive);//在控制台输出一下发送过来的数据Console.ReadKey();clientSocket.Close();//关闭与客户端的连接serverSocket.Close();//关闭自身的连接 }}}

在服务器端中,跟上一篇文章中提到的异步接收消息类似的一个c#封装方法--BeginAccept(),这个方法也是需要一个回调函数和一个传递给回调函数的参数,然后在回调函数中完成服务器端与客户端的连接并在连接完成后继续等待下一个客户端的连接,可参考上一篇文章内容。

unity网络实战开发(丛林战争)-前期知识准备(006-修改服务器端开启异步处理客户端连接请求)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。