我几个月来一直坚持这个问题并决定寻求帮助。
问题:我一直在使用StreamSocket
类连接到Minecraft服务器并要求他们提供状态。以下是我正在使用的代码的一部分。我只包括导致我遇到麻烦的片段。以下代码适用于任何本地,Intranet连接,即127.0.0.1,计算机名称等。问题是当我尝试通过其IP地址或域名访问任何Internet服务器时。
尝试解决问题的步骤:我已经尝试了大量的小调试技巧。从我的代码中可以看出,我使用Debug.Writeline()
来显示代码挂起的位置。我相信StreamSocket
正确地连接到远程desination但是没有收到任何数据,因为超时已到达。我已经将ip地址硬编码到代码中而没有运气。此外,我延长了超时,没有运气。我还检查了.appxmanifest文件并选择了所有必需的功能(即Internet(客户端),Internet(客户端和服务器)和专用网络(客户端和服务器))。另外,我没有运气就关闭了我的防火墙。
我真的不知道如何解决这个问题或者发生了什么。感谢您的帮助。
try
{
await _socket.ConnectAsync(new HostName(await ResolveDNS(Host)), Port.ToString()); //Resolve DNS performs an operation that turns domain names into ip addresses
writer = new DataWriter(_socket.OutputStream);
reader = new DataReader(_socket.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
//Write the byte to the stream
writer.WriteByte(0xFE);
await writer.StoreAsync();
//Debug.WriteLine("MinecraftServerPing: Writing Data");
//Recieve the data
sw = new Stopwatch();
sw.Start();
Debug.WriteLine("MinecraftServerPing: Waiting for Data");
DataReaderLoadOperation x = reader.LoadAsync(256);
while (x.Status == Windows.Foundation.AsyncStatus.Started && reader.UnconsumedBufferLength == 0)
{
if(sw.Elapsed.TotalSeconds > RecieveTimeout)
{
x.Cancel();
throw new Exception("Timeout Reached");
}
}
//More code to process the data and such
catch
{
//Catches any errors
}
更新 过去几个小时我一直在研究Microsoft Network Monitor 3.4的工作原理。它提供的数据非常有趣。服务器似乎停止向我的应用程序发送数据。不知道为什么,但至少我现在知道问题不仅在我身边。