/// <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); } }
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); } }