2

我正在尝试使用 Windows.Networking.Sockets API 获得适用于 Windows Store 的基本接口。到目前为止,我有这个:

    public async void Test()
    {
        using (var socket = new StreamSocket())
        {
            socket.Control.KeepAlive = false;
            socket.Control.NoDelay = false;
            await socket.ConnectAsync(new HostName("192.168.1.1"), "5555", SocketProtectionLevel.PlainSocket);
            using (var writer = new DataWriter(socket.OutputStream))
            {
                writer.UnicodeEncoding = UnicodeEncoding.Utf8;
                writer.WriteString("yea!");
                //writer.WriteByte(0x50); //this doesn't work either to send raw ASCII
                var t = writer.FlushAsync();
                while (t.Status != AsyncStatus.Completed) ; //just in case?
            }
        }
    }

到目前为止,我似乎确实获得了成功的连接和断开连接。但是,我从来没有收到任何文本。

我的 netcat 命令(在 OpenBSD 路由器下运行)

$ nc -lv 5555

如果我在运行 Test 函数时没有运行 netcat,它会抛出异常,所有这些都和预期的一样。我在这里做错了什么?

4

1 回答 1

1

这对我来说绝对没有意义,但显然StoreAsyncDataWriter. 我会认为 Flush 应该调用它,但显然不是。关于 WinRT API 的另一个有趣的部分。我的固定代码:

        using (var socket = new StreamSocket())
        {
            socket.Control.KeepAlive = false;
            socket.Control.NoDelay = false;
            await socket.ConnectAsync(new HostName("192.168.1.1"), "5555", SocketProtectionLevel.PlainSocket);
            using (var writer = new DataWriter(socket.OutputStream))
            {
                writer.UnicodeEncoding = UnicodeEncoding.Utf8;
                writer.WriteString("yea!");
                await writer.StoreAsync();
            }
        }
于 2013-03-28T04:55:40.447 回答