2011-08-14 17 views
0

私は現在作業しているサーバークライアントアプリケーションを持っています。サーバーはWAN上で正常にデータを受信して​​おり、クライアントはデータを受信して​​いるように見えますが、クライアントは1つの通信しか受信していません。クライアントが常に最初の戻りUDP通信のみを受信し、後続のUDP通信を受信しないようにするWAN上のものはありますか?助けてくれてありがとう。UDPクライアントは1つのメッセージのみを受信します

クライアントUDPリスニングコード

private void receiveUDP() 
    { 
     System.Net.IPEndPoint test = new System.Net.IPEndPoint(System.Net.IPAddress.Any,UDP_PORT_NUMBER); 
     System.Net.EndPoint serverIP = (System.Net.EndPoint)test; 
     server.Bind(serverIP); 
     //server.Ttl = 50; 

     EndPoint RemoteServ = (EndPoint)listenUDP; 
     do 
     { 
      byte[] content = new byte[1024]; 
      int data = server.ReceiveFrom(content, ref RemoteServ); 

      string message = Encoding.ASCII.GetString(content); 


      ProcessCommands(message); 


     } while (true); 
    } 
+0

難しいと言えます。クライアントプログラムのコードを投稿できますか? –

+0

@Hunter McMillenクライアントのリスニングコードを含むように編集されています。もっと見る必要がある場合は、私に知らせてください。 – Stephen

+0

listenUDPはどこに定義されていますか? – iandotkelly

答えて

1

これは、暗闇の中で刺すのビット(あなたが本当に決定的に何が起こっているのかと言うのに十分なコードを提供していないので)ですが、一つの大きな理由がありますWAN上で配信されないUDPデータグラムと、常に正常に到着するUDPデータグラムが一貫して見えるのはなぜですか。この理由はMTUです。単一のUDPデータグラムで送信できるMaximum Transmission Unit。これは、例えば、あなたの最初のデータグラムが短い "I accept your connection"というメッセージである場合など、あなたが見ているような動作を簡単に生成することができます。その後、大きなファイルを含むデータグラムに従います。最初の(小さい)データグラムはMTUよりも小さく、配送されますが、次の(大きい)データグラムはMTUよりも大きく、途中で破棄されます。

WAN上のUDPの場合、MTUは約1500バイト以下で、多くの場合、1200バイト程度の低さになることがあります。それより大きいパケットは、エンドポイント間のどこかに静かにドロップされます。 UDPを介して大量のデータブロックを送信するには、それらを送信しているネットワークセグメントのMTUよりも細かく分割する必要があります。

LAN上では、通常、任意のサイズのデータ​​グラムを送信できます。しかし、インターネットや異種ネットワークを介して送信されるとすぐに、それらは黙って廃棄される可能性があります。

大きなファイルを送信する必要がある場合は、代わりにTCP経由で送信することもできます。 TCPは自動的にチョッピングデータをMTUに収まるように管理し、パケットがすべて受信され、順番に受信されるようにします。 UDP経由で送信されたデータグラムから受信しないことを保証します。

私が上で述べたように、これは暗闇の中で完全な刺し傷であり、あなたの実際のトラブルに実際に関連しないかもしれません。しかし、それは部屋の中のゾウです。私たちが続けなければならないのは、最初のパケットが常に正常に到着し、後でパケットが到着しないということだけです。

+0

私はこれが問題だとは思わない。送信しているパケットはすべてほぼ同じサイズです。しかし、私はそれを調べるでしょう。ここまでのコードを参考にすると、前回の質問へのリンクが表示されます。この質問には、サーバーの接続に固有のコードの大部分があります。http://stackoverflow.com/questions/7018796/tcp-udp -socket-server-on-wan – Stephen

+0

@Stephen問題を修正しましたか? –

+0

@NeilBarnwell私は実際に最終的にしました。基本的に同じ話題について別の質問をして、問題を解決することができました。ここでは私が尋ねた質問へのリンクです:http://stackoverflow.com/questions/7020996/tcp-and-udp-socket-server-on-a-wanこの問題を解決しようとしている場合は、コメントを読んでくださいその質問に対する答え。 – Stephen

関連する問題