从StreamSocket读取数据仅适用于桌面,而不适用于手机(通用Windows应用程序)

时间:2016-03-23 19:17:13

标签: win-universal-app windows-10-universal asyncsocket windows-10-mobile

UWP应用程序出现了一个奇怪的问题,我试图在创建套接字并从中读回数据时创建。这是基本情景:

_commandSocket = new StreamSocket();
await _commandSocket.ConnectAsync(new HostName("192.168.1.1"), "15740", SocketProtectionLevel.PlainSocket);
_commandOutput = _commandSocket.OutputStream;
_commandInput = _commandSocket.InputStream;
await _commandOutput.WriteAsync(initCommandBuffer);
var lengthBytes = new byte[4].AsBuffer();
await input.ReadAsync(lengthBytes, 4, InputStreamOptions.None);
etc..etc...etc...

我基本上打开一个套接字并向我的设备发送初始化命令。我的想法是,它首先以回复的方式向我发送回复的长度。

当我在桌面上调试/运行应用程序时,这一切都运行得很好,但是如果我尝试在我的Window 10移动设备(诺基亚930)上运行它,那么似乎没有读取单个字节(I'我试过读1个字节而不是4个字节。应用程序开发应该是“通用”。并且它完全在我的桌面上工作我不知道从哪里开始修复它。

打开移动设备上的连接有效,我在发送初始化命令时也没有收到任何错误,它只是在await ReadAsync命令上保持阻塞(好像什么也没有被发回)。

我对我连接的设备没有任何影响,但是因为这一切都在桌面上完美运行,设备并不知道谁在询问我很无能为力。

1 个答案:

答案 0 :(得分:0)

无法确认我的答案,因为我只在模拟器上测试过,但我使用了流套接字监听器。

        private async void StartServer()
    {
        int Port = 80;
        try
        {
            //Bound to port 80
            await listener.BindServiceNameAsync(Port.ToString());
        }
        catch (System.Runtime.InteropServices.COMException)
        {
            //Port 80 for communication is blocked.
        }

        listener.ConnectionReceived += async (s, e) =>
        {
            using (IInputStream input = e.Socket.InputStream)
            {
                var buffer = new Windows.Storage.Streams.Buffer(200);
                await input.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.Partial);
                //reads incoming stream
                string data = Encoding.ASCII.GetString(buffer.ToArray(), 0, (int) buffer.Length);
            }

            using (IOutputStream output = e.Socket.OutputStream)
            {
                using (Stream response = output.AsStreamForWrite())
                {
                    response.Write(Encoding.ASCII.GetBytes("Response."), 0, 1);
                }
            }
        };
    }