2012-04-25 17 views
2

ソケットの使い方を勉強しようとしていますが、私は小さなエコーサーバーを作成しました。私は、日食のコードを実行し、私はポートにプロンプ​​トとのtelnetコマンドに行く、それがエコーバックすべきであるが、代わりにそれは私に、このエラーを与える:ここjava:文字列のインデックスが範囲外です

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); 
    } 
} 
} 

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

答えて

3

これが問題である:

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

あなたの「余分なテキスト」は、実際にある文字ではなく、18あなたはしかしオフセットと長さを指定する必要はありません - あなただけ使用することができます。

writer.write("echo from server:" + textLine); 
関連する問題