【发布时间】:2013-09-11 21:21:03
【问题描述】:
我目前正在尝试将我的应用程序从 .NET 移植到 Windows 应用商店,但我无法让我的 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 应用商店兼容代码如下所示:
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?
【问题讨论】:
-
当你翻译的代码和 Telnet 使用 TCP 时,为什么你使用 UDP?这就是为什么 Wireshark 不将其用作 Telnet 的原因。至于 MessageReceived 的异常,我们必须查看您的代码 - 您是否正确绑定了侦听套接字?
-
大声笑,是的......第 4 层以下的大多数东西我几乎认为是魔法。已经很晚了,我没有意识到我从 TCP 切换到了 UDP。如果您想发表评论作为答案,我会为您接受。
标签: c# udp windows-store-apps telnet datagram