2017-04-26 24 views
0

なぜこれは機能しませんか?UDP経由でサーバからクライアントにデータを渡すには?

  Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPEndPoint ipserv = new IPEndPoint(IPAddress.Parse("46.174.48.47"), 46535); 
     IPEndPoint ipLoc = new IPEndPoint(IPAddress.Parse("86.64.47.13"), 755); 
     client.Connect(ipserv); 
     byte[] data = Encoding.UTF8.GetBytes(Console.ReadLine()); 
     client.Send(data); 
     client.Bind(ipLoc); 
     client.Receive(data); 
     Console.WriteLine(data); 

エラー: タイプの未処理の例外「System.Net.Sockets.SocketException」System.dllの 追加情報:受信無効な引数

私は、サーバーへのコンソールからテキストを送信して、それをサーバーから戻したいと思っています。どうやってするの?

+0

サーバはipLocでデータを送信します –

答えて

0

私はサーバとクライアントのIPAndressが同じだと思います。

+0

ポートは同じです。 –

0

あなたはどこに例外が発生するかについては特定していません。しかし、コードを見て、私はそれがclient.Bind()メソッド呼び出しで起こると思います。その理由は、client.Send()と呼ぶと、その時のネットワーク層はあなたのソケットにポート番号を割り当てているからです。 Bind()にローカルIPアドレスとポート番号を割り当てようとすると、ポート番号を変更できず、既に割り当てられているため、失敗します。

ご不明な点がありましたらご遠慮なくipLocとお控えください。サーバエンドポイントだけが固定ポート番号を持つ必要があります。クライアントソケットのポート(およびIPアドレス)をネットワークレイヤーによって暗黙的に割り当てられるようにする方がよいでしょう。

これで問題が解決しない場合は、問題が確実に再現された良いMinimal, Complete, and Verifiable code exampleが含まれていることを確認してください。エラーメッセージの正確なテキストとスローされた例外の完全なスタックトレースを含めてください。

関連する問題