0

我目前正在尝试将我的应用程序从 .NET 移植到 Windows Store,但我无法让我的 UDP telnet 通信正常工作。

我在 App Manifest 中启用了 Internet(客户端)、Internet(客户端和服务器)和专用网络,并且我测试了其他 UDP 通信并且它们已经成功,但是当我尝试发送 telnet 命令时,它不起作用。

特别是我正在处理的代码是以下 C# 的翻译:

var client = new TcpClient("192.168.1.152", 23);
var stream = client.GetStream();
try
{
    var encoder = new ASCIIEncoding();
    var outBuffer = new byte[_bufferSize];
    var buffer = encoder.GetBytes(command);

    await stream.WriteAsync(buffer, 0, buffer.Length);
    return true;
}
catch (IOException)
{
    return false;
}

我的 Windows Store 兼容代码如下所示:

var socket = new DatagramSocket();
var hostName = new HostName("192.168.1.152");
var stream = await _socket.GetOutputStreamAsync(_hostName, "23");

var writer = new DataWriter(stream);
writer.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;

try
{
    var buffer = Encoding.UTF8.GetBytes(command);
    writer.WriteBytes(buffer);
    await writer.StoreAsync();
    return true;
}
catch (IOException)
{
    return false;
}

代码运行,方法返回true(无异常),但是当我运行代码并使用WireShark监控时,我注意到Store App代码没有产生新的telnet流量,接收设备不处理任何发送的命令. .NET 代码在同一台机器上运行,完美无缺。

此外,如果我尝试订阅socket.MessageReceived += MessageReceived触发事件的时间,我会在尝试调用时收到以下异常args.GetDataReader()

现有连接被远程主机强行关闭。(来自 HRESULT 的异常:0x80072746)

什么可能导致此数据无法从 Windows 应用商店应用程序发送?发送 telnet 数据有什么特殊限制吗?或者端口 23 是否以某种方式被我的应用程序阻止了?

4

1 回答 1

1

Use TCP

Why are you using UDP when the code you are translating from and Telnet use TCP? That would be why Wireshark does not pick it up as Telnet. As for the exception on MessageReceived we would have to see your code - did you bind your listening socket correctly?

;)

于 2013-09-18T04:00:08.040 回答