0

ポート 4500 でクライアント要求を待機している IP アドレス 192.168.1.100 のサーバーである Java でクライアント/サーバー アプリケーションを作成したいと考えています。

クライアントはキーボードから文字列を読み取り、接続要求をサーバーに送信します。接続が確立されると、文字列がサーバーに送信されます。

これは私が試したコードです:

サーバー用:

import java.net.*;
import java.io.*;

public class Serveur {

    public Serveur() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try
        {
            ServerSocket ecoute;
            ecoute = new ServerSocket(1111);
            Socket service = null;
            System.out.println("Serveur en attente d'un client !");
            while(true)
            {

                service = ecoute.accept();
                System.out.println("Client connécté !");
                DataInputStream is = new DataInputStream(service.getInputStream());
                System.out.println("Client dit : " + is.readUTF().toUpperCase());
                service.close();
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();

        }
    }

}

クライアントの場合:

import java.net.*;
import java.io.*;
import java.util.Scanner;

public class Client {

    public Client() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Connexion en cours ...");
        try {
            Socket s = new Socket("localhost", 1111);
            DataOutputStream os = new DataOutputStream(s.getOutputStream());
            Scanner sn = new Scanner(System.in);
            os.writeUTF(sn.nextLine());
        } catch ( IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Connécté au serveur !");

    }

}

しかし、私はこのコードに問題がありました:

java.net.ConnectException: 接続がタイムアウトしました: java.net.DualStackPlainSocketImpl.connect0 (ネイティブ メソッド) で接続します。 java.net.AbstractPlainSocketImpl.connect(不明なソース) の java.net.AbstractPlainSocketImpl.connect(不明なソース) の net.AbstractPlainSocketImpl.connectToAddress(不明なソース) java.net.SocksSocketImpl.connect(不明なソース) の java.net.PlainSocketImpl.connect(不明なソース) java.net.Socket の Socket.connect (不明なソース) java.net.Socket の Socket.connect (不明なソース)。java.net.Socket の (不明なソース) Client.main (Client.java: 18)

4

2 に答える 2

1

あなたのコードは私のマシンで正しく動作します。

ここでの問題はコードではなく、ネットワーク設定にあるようです。

あなたがすべき:

  1. IP アドレスとポートの設定が正しいことを確認します
  2. 両方のコンピューターでファイアウォールの設定を確認し、トラフィックがブロックされていないことを確認します
  3. ホスト ファイルが正しいことを確認します (Windows では C:\Windows\system32\drivers\etc\hosts)。localhost エントリが正しく設定されていない可能性があります。
于 2013-03-13T17:02:35.827 に答える
0

環境に関する詳細情報がなければ、明確な答えを出すことは困難です。

ただし、これの最も一般的な理由は、ルーターのポートを適切に転送していないことです。その方法はルーターの製造元によって異なりますが、一般的に言えば、ポート1111をローカル IP アドレス192.168.1.100(または実行しているマシンのローカル IP が何であれ)に転送する必要がありますServeur

(補足: コードですべてが 1111 に設定されていると言っているのに、サーバーがポート 4500 でリクエストをリッスンしていると言う理由がわかりません。 )

于 2013-03-13T17:04:15.427 に答える