0

最近、うまく機能するac#メトロアプリを開発しましたが、今はc#で同じアプリを開発したいと考えています。したがって、このWebサイトのおかげで、メトロアプリライブラリを使用できるようにするためにいくつかのことを行いましたライブラリwindows.networking.proximityは引き続き機能し、windows.security.cryptographyも機能しますが、明らかにwindows.networking.socketsは機能しません。私のコードのこの部分の目標は、wifi でスマートフォンから送信されたデータを受信することです。

namespace OpenItForMeDesktop{
class Server
{
    private StreamSocketListener serverListener;
    public static String port = "3011";
    public static String adressIP = "192.168.173.1";
    private HostName hostName;

    //Initialize the server
    public Server()
    {
        serverListener = new StreamSocketListener();
        hostName = new HostName(adressIP);
        listen();
    }

    //Create the listener which is waiting for connection
    private async void listen()
    {
        serverListener.ConnectionReceived += OnConnection;
        try
        {

            //await serverListener.BindEndpointAsync(hostName, port);
            await serverListener.BindServiceNameAsync(port);
            MainWindow.Current.UpdateLog("Listening for Connection(s)");
        }
        catch (Exception exception)
        {
            MainWindow.Current.UpdateLog("Exception throw in Listen : " + exception);
        }

    }

    //When a connection appears, this function his called
    private async void OnConnection(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
    {

        MainWindow.Current.UpdateLog("A message has been received...");
        if (MainWindow.Current.loadingPage)
        {
            MainWindow.Current.UpdateLog("wait please");
        }
        else
        {

            DataReader reader = new DataReader(args.Socket.InputStream);
            try
            {
                while (true)
                {

                    reader.InputStreamOptions = InputStreamOptions.Partial;
                    // Read first 4 bytes (length of the subsequent string).
                    uint sizeFieldCount = await reader.LoadAsync(sizeof(uint));
                    if (sizeFieldCount != sizeof(uint))
                    {
                        return;
                    }

                    // Read the string.
                    uint stringLength = reader.ReadUInt32();
                    uint actualStringLength = await reader.LoadAsync(stringLength);
                    if (stringLength != actualStringLength)
                    {
                        return;
                    }
                    String message = reader.ReadString(actualStringLength);
                    MainWindow.Current.receiveMessage(message);
                }
            }
            catch (Exception exception)
            {
                // If this is an unknown status it means that the error is fatal and retry will likely fail.
                if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
                {
                    throw;
                }

                MainWindow.Current.UpdateLog("Read stream failed with error: " + exception.Message);
            }
        }
    }




}

}

` このコードをビルドするとスローされるエラーはなく、wireshark を使用してスマートフォンから送信されたパケットを確認すると、フラグ [SYN] を持つパケットのみを受信し、最初に受信した 3 つのパケットは受信しませんでした握手のためにメトロアプリ [SYN]/[SYN,ACK]/[ACK] を使用します。なぜこれが起こるのか誰かが考えていますか?

4

2 に答える 2

1

私は答えを見つけました。それは非常にばかげていました.Windowsのファイアウォールが私のアプリをブロックしていました。

于 2013-08-19T16:21:41.487 に答える
0

追加しましたか

<Capability Name="privateNetworkClientServer" />

Package.appxmanifest に?

于 2013-07-19T11:18:41.187 に答える