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

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且未更改。

最佳答案

IllegalArgumentException是由以下行引起的:

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


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

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

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


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

10-01 20:17