C# Windows应用商店数据报不发送telnet数据

C# Windows应用商店数据报不发送telnet数据,c#,udp,windows-store-apps,telnet,datagram,C#,Udp,Windows Store Apps,Telnet,Datagram,我目前正在尝试将我的应用程序从.NET移植到Windows应用商店,但无法使UDP telnet通信正常工作 我在应用程序清单中启用了Internet(客户端)、Internet(客户端和服务器)和专用网络,并测试了其他UDP通信,它们都成功了,但当我尝试发送telnet命令时,它不起作用 我正在编写的代码是以下C#的翻译: 与Windows应用商店兼容的代码如下所示: var socket = new DatagramSocket(); var hostName = new HostName(

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

我在应用程序清单中启用了Internet(客户端)、Internet(客户端和服务器)和专用网络,并测试了其他UDP通信,它们都成功了,但当我尝试发送telnet命令时,它不起作用

我正在编写的代码是以下C#的翻译:

与Windows应用商店兼容的代码如下所示:

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?

使用TCP


当您翻译的代码和Telnet使用TCP时,为什么要使用UDP?这就是为什么Wireshark不将其作为Telnet接收的原因。至于MessageReceived上的异常,我们必须查看您的代码-您是否正确绑定了侦听套接字


)()

当您翻译的代码和Telnet使用TCP时,为什么要使用UDP?这就是为什么Wireshark不将其作为Telnet接收的原因。至于MessageReceived上的异常,我们必须查看您的代码-您是否正确绑定了侦听套接字?哈哈,是的。。。在第4层下面的大部分东西我几乎都考虑魔法。很晚了,我没有意识到我从TCP切换到UDP。如果你想发表你的评论作为回答,我会为你接受。
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;
}