【发布时间】:2013-03-07 16:15:48
【问题描述】:
我有一个 Metro 应用程序使用 UDP 通过 wifi 与设备通信。但是,当我断开设备与网络的连接或在设备断开连接的情况下启动应用程序时,什么也没有发生。 ConnectAsync 不会引发异常,应用程序不会引发异常,应用程序运行起来就像没有任何问题一样。 我无法 ping 另一端,但如果我给它一个格式化的字符串,它会响应。该设备当前连接到可以访问互联网的路由器,但我最终计划使用没有互联网访问权限的路由器。我从来没有对 UDP 做过任何事情,所以我在这里不知所措。
这是一个 UDP 侦听器/编写器的实现(取自 Pete Bright 在 10rem.net)
class Network
{
private DatagramSocket _socket;
public bool IsConnected { get; set; }
public bool recieved;
public string ret;
public Network()
{
IsConnected = false;
_socket = new DatagramSocket();
_socket.MessageReceived += OnSocketMessageReceived;
}
public async void Connect(HostName remoteHostName, string remoteServiceNameOrPort)
{
try
{
await _socket.ConnectAsync(remoteHostName, remoteServiceNameOrPort);
}
catch (Exception e)
{
var msg = new MessageDialog(e.ToString());
msg.ShowAsync();
}
IsConnected = true;
}
private void OnSocketMessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
{
var reader = args.GetDataReader();
var count = reader.UnconsumedBufferLength;
var data = reader.ReadString(count);
ret = data.Trim();
recieved = true;
}
DataWriter _writer =null;
public async void SendMessage(string message)
{
if (String.IsNullOrEmpty(message)) return;
if (_writer == null)
{
var stream = _socket.OutputStream;
_writer = new DataWriter(stream);
}
_writer.WriteString(message);
await _writer.StoreAsync();
}
}
【问题讨论】:
-
您确定
ConnectAsync还没有尝试连接吗? -
我认为有一个超时,但它只是在连接时“挂起”。
标签: c# windows-store-apps