1

Java で基本的なデータグラム クライアント/サーバー プログラムを作成しようとしています。

サーバーをローカル コンピューターのポート 9321 に固定しました。

ローカル コンピューターのポート 9320 でクライアントを作成し、ポート 9321 でワイヤレス ルーター ネットワーク (192.168.1.100) を介してデータを送信すると、プログラムが動作します。

次に、ポート 9321 でインターネット IP 139.195.12.183 (私の ip) 経由で (ルーター経由で) パケットを送信しようとしましたが、うまくいきませんでした! この例外があります:

java.net.SocketException: Interrupted function call: Datagram send failed

ポート 9321 へのすべての要求をコンピューターに転送するようにルーターを設定し、そのポートでコンピューターのファイアウォールの例外を設定しました。

これがソースです

String SERVER = "139.195.12.183";

sendString(SERVER, 9321, "Greetings"); <<


private void sendString(String IP, int port, String toSend) {
    byte[] buf = toSend.getBytes();
    DatagramPacket packet = null;
    try {

        packet = new DatagramPacket(buf, buf.length, InetAddress.getByName(SERVER), port);

        ds.send(packet);<<
    }catch(UnknownHostException e) {
        System.out.println("unknownhostception");
    }catch(IOException e) {
        System.err.println("ioception "+e.getMessage());

    }

}

別のフォーラムから別の回答がありました:

「ルーターの仕組みでは、内部ネットワーク (LAN) から外部 (WAN) インターネットアドレスを見ることはできません。それがあなたがやろうとしていることであるなら、何も問題はありません。うまくいかないだけです。

イアン。"

説明はありますか?

4

1 に答える 1

0

実行できるいくつかの手順:

  1. コードが LAN 上の 2 台のマシンで機能することを確認します。
  2. ping <target-ip>あなたのマシンで動作することを確認してください。
  3. その場合は、ローカルおよびLAN のファイアウォール設定をチェックして、ポート/プロトコルをブロックしていないか確認してください。
  4. ポートがブロックされていない場合は、ポートを別のものに変更します。一部の ISP は、特定のポートをブロックします。

このエラーが発生するその他の理由:

  • UDP (だと思いますか?) データグラムが大きすぎます。
  • 受信に影響を与えないクライアント側のエラー (エラーがスプリアスであるいくつかのネットワーク スタックで同様のことが見られました。)

詳細情報が必要な場合は、patsebin などからコードへのリンクを投稿してください。

于 2012-02-25T14:21:39.373 に答える