使用工具:VS2015

使用语言:c#

作者:Gemini_xujian

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

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

先上代码:

服务器端:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;//引入的命名空间
using System.Net.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-修改服务器端开启异步处理客户端连接请求)相关推荐

  1. unity网络实战开发(丛林战争)-正式开发阶段(016-数据库设计以及登录处理)

    使用工具:VS2017,unity3d 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 上一篇文章中,已经完成了游戏场景与开始界面UI的搭建,接 ...

  2. unity网络实战开发(丛林战争)-前期知识准备(012-UI框架开发)

    使用工具:VS2017,Unity2017.3,DoTween插件 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解 ...

  3. unity网络实战开发(丛林战争)-前期知识准备(011-c#连接数据库并实现增删改查以及sql注入问题)

    使用工具:VS2015,Mysql 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下数据库的前期连接准备以及通过 ...

  4. unity网络实战开发(丛林战争)-前期知识准备(004-开发TCP客户端的接收数据和发送数据)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下客户端的接收数据和发送数据. 首先在现有 ...

  5. unity网络实战开发(丛林战争)-前期知识准备(010-在服务器端解析数据)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下在服务器端解析数据. 首先,同前文类同, ...

  6. unity网络实战开发(丛林战争)-前期知识准备(008-粘包和分包及解决方案)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下什么是粘包和分包,以及处理粘包和分包问题 ...

  7. unity网络实战开发(丛林战争)-前期知识准备(003-开发服务器端的发送数据和接收数据)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下服务器端的发送数据和接收数据. 上篇文章 ...

  8. unity网络实战开发(丛林战争)-正式开发阶段(013-游戏服务器端框架搭建)

    使用工具:VS2015 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 继上一篇文章内容,这节课讲解一下游戏服务器端的开发. 01-项目目录结构 ...

  9. unity网络实战开发(丛林战争)-正式开发阶段(014-游戏客户端与服务器端连接搭建)

    使用工具:VS2017,unity3d 使用语言:c# 作者:Gemini_xujian 参考:siki老师-<丛林战争>视频教程 上一篇文章中,我已经把服务器端的框架进行了搭建,接下来, ...

最新文章

  1. 用C语言解“超速判断”题
  2. [Step By Step]使用SLT工具从SAP导入数据到SAP HANA
  3. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证
  4. Python_Day4_函数
  5. 你会利用css写下拉列表框吗?
  6. 从Config文件中读取节点的配置信息
  7. 文娱倍受青睐,可是网文为啥不香了?
  8. IIS6中配置PHP
  9. 甘肃省计算机等级考试在线支付,甘肃计算机等级考试入口
  10. js 小数取整的函数
  11. linux命令老是忘记,Linux可能会忘记的命令整理
  12. ABAP Modification browser SE95
  13. el-select 结合 el-checkBox 实现下拉全选+多选功能;el-select下拉框全选功能;
  14. 【云栖大会】阿里云未来走势 看当家的怎么说?
  15. Python Day2
  16. ckeditor+ckfinder使用
  17. Vmware虚拟机全屏
  18. 春季个人训练赛 5(广工新生赛)
  19. 图像基本处理(灰度化)
  20. 财务软件虚拟服务器,新中大财务软件远程虚拟化办公方案

热门文章

  1. 史上最强的YUV转换RenderScript,支持转换成RGBA,BGRA,并且同时支持旋转,翻转,YUV数据格式支持NV21, YV12, YUV420_888, 分别对应Android Camer
  2. Dayjs 的一些常用方法
  3. cad2016中选择全图字体怎么操作_打开CAD图纸文字全部显示问号,这是为什么?怎么解决...
  4. android 设置字体包 字体包导致字体偏移 字体内边距问题(已解决)
  5. Linux镜像下载大全
  6. 2020三月实习后台春招经历
  7. HR推荐:应届生简历制作的细节
  8. 计算机绘图论文范文大全集,计算机绘图实习报告范文
  9. 时变电磁场 工程电磁场 P24
  10. 求斜率,针对非线性传感器分段计算斜率,套入程序中。