UDPを使用してwifi経由でデバイスと通信するメトロアプリがあります。ただし、デバイスをネットワークから切断したり、デバイスを切断した状態でアプリを起動したりしても、何も起こりません。ConnectAsyncは例外をスローしません。アプリは例外をスローしません。アプリは、何も問題がないように実行されます。もう一方の端にpingを実行することはできませんが、フォーマットされた文字列を指定すると応答します。デバイスは現在インターネットにアクセスできるルーターに接続されていますが、最終的にはインターネットにアクセスできないルーターを使用する予定です。私はUDPで何もしたことがないので、ここで途方に暮れています。
これはUDPリスナー/ライターの実装です(10rem.netのPete Brightから取得)
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();
}
}