Пример #1
0
        /// <summary>
        /// 向服务器请求软件和游戏白名单
        /// </summary>
        /// <param name="ipadress">服务器IP</param>
        /// <param name="port">服务器端口</param>
        /// <returns>软件和游戏白名单</returns>
        public static GetExeInfoRsp GetExe(string ipadress, int port)
        {
            GetExeInfoReq builder = new GetExeInfoReq();

            builder.requestType = GetExeInfoReq.RequestType.ALL;
            try
            {
                MemoryStream ms = new MemoryStream();
                Serializer.Serialize <GetExeInfoReq>(ms, builder);
                byte[]    data         = ms.ToArray();
                IPAddress ip           = IPAddress.Parse(ipadress);
                Socket    serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                serverSocket.Connect(new IPEndPoint(ip, port));
                log.InfoFormat("连接服务器{0}成功", ip);
                byte[] result = new byte[4096];

                byte[] byteArray = PackMessage((int)ENetworkMessage.GET_EXE_INFO_REQ, data);
                serverSocket.Send(byteArray);
                log.InfoFormat("向服务器{0}发送请求软件白名单消息成功", ip);
                int count = 5;
                while (count-- > 0)
                {
                    int receiveNumber = serverSocket.Receive(result);
                    int size          = BytesToInt(result, 0);

                    ENetworkMessage type = (ENetworkMessage)BytesToInt(result, 4);

                    if (type == ENetworkMessage.GET_EXE_INFO_RSP)
                    {
                        byte[] objBytes = new byte[size - GetMessageObjectStartIndex()];
                        for (int i = 0; i < objBytes.Length; i++)
                        {
                            objBytes[i] = result[GetMessageObjectStartIndex() + i];
                        }

                        MemoryStream  ms1      = new MemoryStream(objBytes);
                        GetExeInfoRsp response = Serializer.Deserialize <GetExeInfoRsp>(ms1);
                        log.Info("服务器返回状态码Response : " + response.resultCode);
                        try
                        {
                            serverSocket.Close();
                        }
                        catch (Exception e) {
                        }

                        return(response);
                    }
                }
                return(null);
            }
            catch (IOException e)
            {
                log.Info("向服务器请求软件白名单异常");
                return(null);
            }
        }
Пример #2
0
 public static List <Item> GetOnlineGameList(string ip, int port)
 {
     try
     {
         GetExeInfoRsp ger  = GetExe(ip, port);
         List <Item>   list = new List <Item>();
         foreach (GameItem a in ger.gameItem)
         {
             Item i = new Item();
             i.name    = a.name;
             i.EXEname = a.gameName;
             list.Add(i);
         }
         return(list);
     }
     catch (Exception e)
     {
         return(null);
     }
 }