


怎么解決呢,大佬們
uj5u.com熱心網友回復:
你的 conn.Host 和 conn.Port 是什么這是因為在 從服務器回傳的值里面,嘗試通過 byteReader 轉換時出錯了,具體出錯在那一句倒是不知道,但是通過附加源代碼的 QueryConnection 類還是可以找到在哪里炸的
另外吐槽一下這個庫的設計,居然一個方法那么長,提示資訊也很難輔助定位
附框架代碼
public InfoResponse GetInfo()
{
try
{
request(Constants.A2S_INFO_REQUEST);
var response = fetchResponse();
var byteReader = response.GetByteReader();
byte header = byteReader.GetByte();
if (header != 0x49)
throw new ArgumentException("The fetched Response is no A2S_INFO Response.");
InfoResponse res = new InfoResponse();
res.Header = header;
res.Protocol = byteReader.GetByte();
res.Name = byteReader.GetString();
res.Map = byteReader.GetString();
res.Folder = byteReader.GetString();
res.Game = byteReader.GetString();
res.ID = byteReader.GetShort();
res.Players = byteReader.GetByte();
res.MaxPlayers = byteReader.GetByte();
res.Bots = byteReader.GetByte();
res.ServerType = byteReader.GetByte().ToServerType();
res.Environment = byteReader.GetByte().ToEnvironment();
res.Visibility = byteReader.GetByte().ToVisibility();
res.VAC = byteReader.GetByte() == 0x01;
//Check for TheShip
if (res.ID == 2400)
{
res.Mode = byteReader.GetByte().ToTheShipMode();
res.Witnesses = byteReader.GetByte();
res.Duration = TimeSpan.FromSeconds(byteReader.GetByte());
}
res.Version = byteReader.GetString();
//IF Has EDF Flag
if (byteReader.Remaining > 0)
{
res.EDF = byteReader.GetByte();
if ((res.EDF & 0x80) == 1)
{
res.Port = byteReader.GetShort();
}
if ((res.EDF & 0x10) == 1)
{
res.SteamID = byteReader.GetLong();
}
if ((res.EDF & 0x40) == 1)
{
res.SourceTvPort = byteReader.GetShort();
res.SourceTvName = byteReader.GetString();
}
if ((res.EDF & 0x20) == 1)
{
res.KeyWords = byteReader.GetString();
}
if ((res.EDF & 0x01) == 1)
{
res.GameID = byteReader.GetLong();
}
}
return res;
}
catch (Exception ex)
{
throw new SourceQueryException("Could not gather Info", ex);
}
}
uj5u.com熱心網友回復:
從上面庫的代碼的第16-62的所有 byteReader 相關的邏輯都可能炸,推薦你拿到 fetchResponse() 的值,然后看他的輸出是什么,應該就是這里回傳的值會炸轉載請註明出處,本文鏈接:https://www.uj5u.com/net/64924.html
標籤:C#
上一篇:做過ERP的進來討論下
下一篇:讀Excel資料放入DataTable中,只有1列資料,洗掉原表中最后一行資料,才能正常讀取全部資料,求指導什么情況?
