0

ソケットサーバーを作成しようとしています。パテを介してこのサーバーに接続しています。「こんにちは」と入力すると、「こんにちは」ではなく「いいえ」と表示されます。私はこれをJava Webサイトで見つけました。私が間違っていることを教えていただければ、それは素晴らしいことです。ありがとう!

int port = 12345;
ServerSocket sock = new ServerSocket(port);
System.out.println("Server now active on port: " + port);

Socket link = sock.accept();
System.out.println("Interface accepted request, IP: " + link.getInetAddress());

BufferedReader input = new BufferedReader(new InputStreamReader(link.getInputStream()));
PrintWriter output = new PrintWriter(link.getOutputStream(), true);

output.println("ISEEYOU");
String inputLine;

Thread.sleep(1500);

while((inputLine = input.readLine()) != null) {
    if(inputLine.equals("hi")) {
        output.println("hi");
    }else{
        output.println("no");
    }
}
4

1 に答える 1

2

あなたのJavaプログラムは正しいです。

パテから得られるものを確認するためにSystem.out.printf("[%s]", inputLine);、ループの最初の行として追加しただけです。whileあなたの問題は、パテが接続に使用するプロトコルだと思います。私にとってはRAWで機能しました。私が使用したセッション設定を以下に示します。

PUTTY セッション設定

編集:あなたのコメントによると、コンソールから行を読み取り、それをサーバーに送信し、エコーをコンソールに出力する単純なクライアント用のコードをいくつか追加しました。

public void Client() throws IOException {
    // Client that closes the communication when the user types "quit"
    Socket socket = new Socket("localhost", 8080);
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintStream ps = new PrintStream(socket.getOutputStream()); 

    BufferedReader user = new BufferedReader(new InputStreamReader(System.in));
    String line;
    while(!(line = user.readLine()).equals("quit")) {
        ps.println(line); // Write to server
        System.out.println(reader.readLine()); // Receive echo
    }
    socket.shutdownOutput(); // Send EOF to server
    socket.close();
}

対応するサーバーは次のようになります。

public void server() throws IOException {
    ServerSocket serverSocket = new ServerSocket(8080);
    Socket socket = serverSocket.accept();
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintStream ps = new PrintStream(socket.getOutputStream()); 

    // Just read a line and echo it till EOF
    String line;
    while((line = reader.readLine()) != null) ps.println(line);
}

マシンで 8080 が既にバインドされている場合は、ここで使用したポートを変更する必要があるかもしれません。また、クライアントとは別のコンピューターでサーバーを実行することもできます。この場合、「localhost」を変更する必要があります。

于 2013-08-06T06:14:07.337 に答える