有人可以解釋我爲什麼得到此流不支持超時。錯誤。此流上不支持超時
如果我使用我的代碼這樣的事情很好。我的套接字連接到服務器和服務器信息。 (這種方法就像假人導致連接是發生了一臺服務器,並在一切開始)
private async Task Update()
{
while (true)
{
server = Ips.First();
if (server.Map != sq.map || server.Name != sq.name || server.Players != sq.players)
{
return;
}
}
}
而在真正的應用程序,我需要查詢大量的服務器。所以我嘗試這樣的事情(因爲我是小白和不能想出更好的辦法)
foreach (var server in Ips)
{
sq.Connect(new Windows.Networking.HostName(server.Ip), server.Port);
if (server.Map != sq.map || server.Name != sq.name || server.Players != sq.players)
{
return;
}
}
而這正是我得到超時不支持此流的錯誤。有人可以解釋爲什麼,也許告訴我我應該在哪裏看?
我的錯誤出現在這個方法的第一行: (流streamIn = args.GetDataStream()AsStreamForRead();)
private async void Socket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
{
Stream streamIn = args.GetDataStream().AsStreamForRead();
StreamReader reader = new StreamReader(streamIn);
string message = await reader.ReadToEndAsync();
byte[] packet = System.Text.Encoding.ASCII.GetBytes(message);
Parser parser = new Parser(packet);
請記住,從互聯網收到的數據必須由應用程序立即處理或保存,否則將會丟失(這是緊急I/O)。這就是錯誤所說的。 –
但爲什麼第一種方法有效? – Myrez
因爲超時是由於一次做很多事情造成的,只做一兩件事情並不意味着相同數量的負載。有1或2件事情是有時間處理所有。隨着更多,它不是。 –