2017-11-27 47 views
0

私の問題は、UDPクライアントがネットワーク上に何も持っていないときに接続されていると報告していることです。私は、7777のコンピュータポートからポート10.75.10のIP 10.10.10.10を持つPLCモジュールに接続しようとしています。イーサネットまたはワイヤレス接続がオンになっていなくても、クライアントからのConnect()なぜ私のUDPは接続されていないと言っていますか?

私の問題の核心は、私は、私は、Connect()のコマンドの後にブレークポイントを挿入した場合、私は非常に奇妙な動作を得る

Public Sub Connect() 
    Try 
     If (plcType = 0) Then 
      udpClient = New UdpClient(7777) 
      udpClient.Client.Connect(IPAddress, port) 
      SendCommand("ME") 
     End If 
    Catch 
     MsgBox("Could not connect to the controller, please check IP address." & vbCrLf & Err.Description) 
     'Connect() 
    End Try 
End Sub 

を信じて、私の接続コードを中心に展開。私がudpClient.Clientのプロパティを調べると、ブレークポイントがヒットした後、接続されていると言われますが、それらのプロパティを残してからもう一度見ると、突然変更され、接続されていないと言いますその後は接続されません。

この問題は、2台目のコンピュータを接続して同じデバイスを同じデバイス上で実行しようとした後にのみ表示されます。どちらのコンピュータも、私が理解できるものではなく、もはや正しくデバイスと話すことはできませんが、私のコンピュータの1つが、明らかにそうでないときにデバイスと話していると信じている理由を理解できません。 ありがとうございました。

更新:すべてのネットワークが無効または切断されている場合のみ、使用可能な接続がこの条件をトリガーします。しかし、そのIPのネットワーク上にデバイスが存在しない場合、接続されていると報告しています。

+0

[** 'UdpClient.Client' **](https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.client(V = vs.110) .aspx)は 'UdpClient'とは異なる振る舞いをする' Socket'の基本です。あなたは[** 'UdpClient.Connect()'メソッド**](https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient.connect(v = vs。 110).aspx)を使用してください。 –

+0

Visual Vincent同じことをやってみました。 : – Sean

+3

UDPには接続の概念はありません実際に何を検出したいのですか – CodeCaster

答えて

2

@CodeCasterは "UDPには接続されているという概念はない"と言っています。 UDPは、コネクションレスのファイアーアンドフォーゼルプロトコルです。データグラムを送信すると、その宛先に到達する保証はありません。

複数の言語で使用できる「接続」操作が異なると、「OK、この特定のアドレスとポートと通信するためにこのソケットを使用します」という意味です。この知識は、ネットワークを介して送信されるパケットには変換されません。 sendtoの代わりにsend関数を使用できるようにするローカルのものです。

ネットワーク上に特定のIPおよびUDPポートを受信して​​いるデバイスがあるかどうかを知りたい場合は、独自の同期メカニズムが必要です。このプロトコルは、そのままの状態ではサポートしていません。だから、例を示します。

  1. ハートビート。リモートピアが5秒ごとに特別なマルチキャストメッセージを送信するようにします。 15秒以内にハートビートメッセージを受信して​​いない場合は、リモートピアがダウンしていると想定します。あなた自身の裁量で番号を調整してください。応答エコー -

  2. 、またはエコー要求をピンポン。定期的に特別なデータグラムをリモートピアに送信し、応答を期待します。

  3. ハンドシェイク、確認応答、再試行...必要なチャネルが堅牢であればあるほど、TCPに思い出させるチャネルが増えます。これはプロトコルを切り替えるための一種の兆候です!

+0

これは明らかです。クライアントから「connected = true」を返すと、そのことに何かが存在するかどうかにかかわらず、「私はそのアドレスでパケットを投げることができます。アドレス。 – Sean

+2

UDPソケットの場合、「接続されている」とは単に、ピアIP /ポートがソケットに静的に割り当てられていることを意味します。つまり、IP /ポートは送信されるすべてのデータグラムに明示的に指定する必要はなく、受信データグラムはそのIP /ポートからのみ許可されますが、他の送信元からのデータグラムは黙って無視されます。 –

+0

@RemyLebeau受信データグラムについての公平なポイント!ポストでのみ送信します。 – Vovanrock2002

関連する問題