public MyGameServer(string ip, string port) : base(ip, port) { rand = new Random(); roomManager = new RoomManager(10); player_Room = new Dictionary <string, int>(); curFreeRoom = roomManager.GetRoom(); parser = new MyParser(); ipname_PlayerName = new Dictionary <string, string>(); }
/// <summary> /// 接收消息 /// </summary> /// <param name="client_socket"></param> private void RecieveMsg(IAsyncResult client_socket) { if (!isRunning) { return; } Socket client = (Socket)client_socket.AsyncState; MyParser parser = _allParser[client.RemoteEndPoint.ToString()]; //byte[] _buffer = new byte[_bufferLength]; try { //接收字节数据并返回长度 int n = client.EndReceive(client_socket); //Console.WriteLine(BitConverter.ToString(_buffer)); //if (n == 0) //{ // return;//断开连接 //} parser.ConstructPacket(_allBuffers[client.RemoteEndPoint.ToString()], n); byte[] temp = null; //数据处理 while ((temp = parser.GetSingleData()) != null) { //将消息转化为字符串 string msg = parser.DecoderData(temp); //Console.WriteLine(msg); HandleRecievedData(client.RemoteEndPoint.ToString(), msg); HandleRecievedData(client.RemoteEndPoint.ToString(), temp); } //该用户已经离线 if (!_allNames.Contains(client.RemoteEndPoint.ToString())) { Console.WriteLine("玩家(" + client.RemoteEndPoint.ToString() + ")离线"); return; } client.BeginReceive( _allBuffers[client.RemoteEndPoint.ToString()], 0, _bufferLength, SocketFlags.None, new AsyncCallback(RecieveMsg), client); } catch (Exception e) { Console.WriteLine(e.ToString()); Console.WriteLine("玩家(" + client.RemoteEndPoint.ToString() + ")离线"); Disconnected(client.RemoteEndPoint.ToString()); return; } }
static void Main(string[] args) { //IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName()); //string ipaddr = ""; //foreach(var ip in ips) //{ // Console.WriteLine(ip.ToString()); // if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) // { // ipaddr = ip.ToString(); // break; // } //} Console.WriteLine("请输入服务器IP地址:"); string ip = Console.ReadLine(); Console.WriteLine("请输入服务器端口号:"); string port = Console.ReadLine(); MyGameServer server = new MyGameServer(ip, port); server.StartListen(); while (true) { string cmd = Console.ReadLine(); if (cmd.Equals("exit")) { break; } if (cmd.Equals("test")) { RemoteCMD_Data recData = new RemoteCMD_Data(); recData.player.Name = "test"; MyParser parser = new MyParser(); string msg = LitJson.JsonMapper.ToJson(recData); byte[] buf = parser.EncoderData(msg); server.BroadcastMsg(null, buf); } } }