拆分字符串时无效的端口号 - Java套接字

时间:2017-04-10 15:04:58

标签: java sockets

我有一个程序和一个文字服务器需要相互通信。我能够做到这一点,将信息发送到服务器并再次接收它。 我有以下代码:

try{
     Socket sock=new Socket(InetAddress.getByName(null), 12837);
     InputStream s=sock.getInputStream();
     PrintStream out = new PrintStream(sock.getOutputStream());
     BufferedReader r= new BufferedReader(new InputStreamReader(s));
     String line = r.readLine();
     String[] code = line.split("+");
     while (line != null) {
     System.out.println ("received: " + line);

     // System.out is to the console.
     // out.println is to the server
     out.println("161*");
     line = r.readLine();
     }
} catch (UnknownHostException e) {
     System.out.println("Unknown host. Check the hostname or ip address of the server");
} catch (ConnectException e) {
     System.out.println("Problems connecting to server. Is it running?");
} catch ( NumberFormatException e) {
     System.out.println("Port number should be an integer");
} catch ( IllegalArgumentException e) {
     System.out.println("The port number needs to be less than 65536");
} catch ( Throwable ex){System.out.println ("Exception: " + ex.toString());
     }

我的想法是,我启动单词服务器,运行我的应用程序,然后它将收到消息"<bonjour+[code]>",其中<code>是6个随机字母和数字。我需要的是回复服务器我的用户ID 161*<code>

例如,服务器说"<bonjour+wj1234>",我需要回显"161*wj1234"

我认为最简单的方法是将服务器上的行拆分为+(我还需要删除>)但运行时出现以下错误:

  

端口号必须小于65536

即使我没有对拆分字符串做任何事情,它也会这样做。拆分字符串本身的行为是出于某种原因改变端口号,我手动将其设置为12837并且不会更改。

1 个答案:

答案 0 :(得分:1)

IllegalArgumentException由此行引起:

String[] code = line.split("+");

指定非法正则表达式,因为+是一个特殊符号(“一个或多个”量词)。

您必须使用反斜杠转义+符号以指定文字加号:

String[] code = line.split("\\+");

请注意,java String文字中的反斜杠被编码为两个反斜杠(它本身被转义)。