纳金网
标题:
游戏服务器开发 (服务器创建篇)
[打印本页]
作者:
烟雨
时间:
2014-9-29 03:25
标题:
游戏服务器开发 (服务器创建篇)
虽然unity自身封装了NetWork组件并且在不断的完善它,但是个人并不喜欢这个东西。
众所周知服务器和客户端的开发工作是两个独立的个体,unity的这种做法却是将之混为一谈。
不过在需要高同步性的项目中,NetWork组件来做逻辑同步也是不错,具体如何选择看个人喜好和项目需求。
个人偏好于socket
采用此种方式 不必局限于unity 可以使用c c++ java 等各种语言来进行后台的开发
后台专注于数据、安全,前台专注于显示、品质,各司其职。
本系列文章采用c#+socket进行服务器开发
下面代码将创建一个简单的服务器监听
注:代码内注释清晰,所以本系列文章不会过多讲解
class ServerStart
{
private static Socket server;//服务器监听对象
public static void start(int port)
{
//创建监听对象
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定监听端口
server.Bind(new IPEndPoint(IPAddress.Any, port));
server.Listen(20);
//开启异步连接监听
server.BeginAccept(AcceptCallBack, server);
Console.WriteLine("server start");
while (true) { }
}
public static void stop()
{
server.Dispose();
server.Close();
}
private static void AcceptCallBack(IAsyncResult ar)
{
Console.WriteLine("有客户端连接");
try
{
Socket listener = (Socket)ar.AsyncState;
//获取连接过来的连接信息
Socket client = listener.EndAccept(ar);
//创建自定义连接信息
Session session = new Session();
session.socket = client;
//开始异步监听客户端消息
client.BeginReceive(session.message, 0, session.message.Length, SocketFlags.None, ReceiveCallBack, session);
//服务器继续监听下一个连接到来
listener.BeginAccept(AcceptCallBack, listener);
}
catch
{
}
}
private static void ReceiveCallBack(IAsyncResult ar)
{
Session session = (Session)ar.AsyncState;
int readCount = 0;
try
{
//读取消息长度
readCount = session.socket.EndReceive(ar);//调用这个函数来结束本次接收并返回接收到的数据长度。
if (readCount == 0)
{
Console.WriteLine("有客户端断开连接");
LogicHandler.getInstance().sessionClose(session);
return;
}
byte[] bytes = new byte[readCount];//创建长度对等的bytearray用于接收
Buffer.BlockCopy(session.message, 0, bytes, 0, readCount);//拷贝读取的消息到 消息接收数组
readMessage(session, bytes);//消息读取完成
}
catch (SocketException)//出现Socket异常就关闭连接
{
session.socket.Close();//这个函数用来关闭客户端连接
return;
}
//继续监听下一条消息的到来
session.socket.BeginReceive(session.message, 0, session.message.Length, SocketFlags.None, ReceiveCallBack, session);
}
}
复制代码
作者:
cgjch8
时间:
2014-9-29 08:55
支持好资源
作者:
HIDEOKOJIMA
时间:
2014-9-29 09:30
Thanks for sharing this one !
作者:
hyui
时间:
2014-10-2 05:27
Thanks for sharing this !
欢迎光临 纳金网 (http://old.narkii.com/club/)
Powered by Discuz! X2.5