2012-04-25 123 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); 
相关问题