StreamSocket仅接收来自Intranet源的数据 - Metro App

时间:2014-06-06 16:02:32

标签: c# windows-store-apps datareader stream-socket-client

我几个月来一直坚持这个问题并决定寻求帮助。

问题:我一直在使用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的工作原理。它提供的数据非常有趣。服务器似乎停止向我的应用程序发送数据。不知道为什么,但至少我现在知道问题不仅在我身边。

0 个答案:

没有答案