2012-04-25 118 views
2

我想學習如何使用套接字,我寫了一個小型的echo服務器。我運行Eclipse的,然後我去命令提示符和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); 
相關問題