我有一个程序和一个字服务器,它们之间需要相互通信。我能够做到这一点,将信息发送到服务器并再次接收。
我有以下代码:
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文字中的反斜杠被编码为两个反斜杠(它本身已转义)。