2

私はソケットの使い方を学ぼうとしていて、小さなエコーサーバーを書きました。eclipse でコードを実行してから、コマンド プロンプトに移動し、ポートに telnet で接続します。エコー バックするはずですが、代わりに次のエラーが表示されます。

Exception in thread "Thread-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
    at java.lang.String.getChars(Unknown Source)
    at java.io.BufferedWriter.write(Unknown Source)
    at echoserver.run(echoserver.java:40)

ここに私のコードがあります:

public final class echoserver extends Thread {
private static final int PORT = 8889;
public static void main(String args[]){
    echoserver Echoserver = new echoserver();
    if (Echoserver != null){
        Echoserver.start();
    }
}
public void run (){
    try {

    ServerSocket server = new ServerSocket(PORT , 1);
    while (true) {
        Socket client =server.accept();
        System.out.println("Client connected");
        while (true){
            BufferedReader reader =
                    new BufferedReader(new InputStreamReader(
                        client.getInputStream()));
            System.out.println("Read from client");
            String textLine = reader.readLine() + "\n";
            if (textLine.equalsIgnoreCase("Exit\n")){
                System.out.println("exit invoked, closing client");
                break;
            }
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(
                            client.getOutputStream()));
            System.out.println("Echo input to client");
            writer.write("echo from server:"
                    + textLine, 0 , textLine.length() + 18);
            writer.flush();
        }
        client.close();
    }
}   catch(IOException e){
        System.err.println(e);
    }
}
}

このエラーを修正するにはどうすればよいですか?

4

1 に答える 1

3

これが問題です:

writer.write("echo from server:" + textLine, 0 , textLine.length() + 18);

「追加テキスト」は実際には 18 文字ではなく17文字です。ただし、オフセットと長さを指定する必要はありません。次のように使用できます。

writer.write("echo from server:" + textLine);
于 2012-04-25T09:26:07.363 に答える