私は非常に単純なUdpClientをセットアップして、できるだけ早く8バイトのデータを受信しました。クライアントはデータを非常に高速に送信していますが、サーバーは約0.5秒の非常に不安定な間隔でデータを受信しています。それは受信時に停止し、突然10行ほどのデータグラムを非常に高速に受信し、再び約0.5秒間停止します。何が問題なの?アイブ氏は、ファイアウォールをオフにしようとしたが、それは助けていませんでし...Udpソケット安定送信、バースト受信
クライアント:
if (!_sending)
{
_sending = true;
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += (s2, e2) => { _sending = false; };
args.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.100"), 14123);
args.SetBuffer(buffer, 0, buffer.Length);
_socket.SendToAsync(args);
}
はサーバー:
UdpClient udp = new UdpClient(new IPEndPoint(IPAddress.Parse("192.168.0.100"), 14123));
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] buffer = udp.Receive(ref endpoint);
int x = BitConverter.ToInt32(buffer, 0);
int y = BitConverter.ToInt32(buffer, 4);
Console.WriteLine(string.Format("Receiving x={0}, y={1} @ {2}", x, y, DateTime.Now.Ticks));
}
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
このコードは、継続的に蓄積されたバッファを送信しています
私は今は非常に原始的なコードを知っていますが、少なくとも例外を投げてはいません...
IveはWiresharkでチェックしましたが、探しているものが正確ではありません。 UDPメッセージは問題なく送信されます。
アイブ氏は、できるだけ速く送るUDPを絞るとしないようにその良いアイデアをお読みください。私はそれを目立つ違いなしに試しました。送信は遅くなりますが、受信は前と同じように不安定である/バースト的です。
クライアントと受信者の両方が同じdev-machine(Windows 7)にあります。
ここでは、受信コール間の時間を測定した結果を示します。あなたはそれがすべての30回の反復約1秒間動けなく見ることができるように:
1,0180582
0,001
0
0
0,0010001
0
0
0
0
0,0010001
0
0
0
0
0
0
0
0
0
0
0,0010001
0
0
0
0
0
0,0010001
1,0170582
など
を更新
遅延バッファが送信された後に生じるように見えます。送信コードはバッファを非常に速く/流動的に送信するように見えますが、Wiresharkに表示されたときには約1秒ごとにudp-firingの約1秒の遅延があります。受信コードはこの遅延を抱えているようには見えない、それはすでにそこにある。理解できません。
wireshark(http://www.wireshark.org/)でネットワーク上で起こっていることを見て、コードを投稿してください。 –
メッセージは期待どおりに送信されますか(つまり、待ち時間が短い)?それとも、Wiresharkで彼らは「不安定」ですか?そうであれば、送信コードが悪いです。そうでない場合、受信コードが悪いです。 –
Wiresharkのリストは小さな間隔で更新されているようです(約0.2秒)が、私のメッセージは受信機ではWSの方がはるかに流動的です。送信コードは速くて流動的でもあります。しかし、私は受け取ったコードに何が間違っているのか分かりません。あまりコードはありません。 –