我有一个程序和一个文字服务器需要相互通信。我能够做到这一点,将信息发送到服务器并再次接收它。 我有以下代码:
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
并且不会更改。
答案 0 :(得分:1)
IllegalArgumentException
由此行引起:
String[] code = line.split("+");
指定非法正则表达式,因为+
是一个特殊符号(“一个或多个”量词)。
您必须使用反斜杠转义+
符号以指定文字加号:
String[] code = line.split("\\+");
请注意,java String文字中的反斜杠被编码为两个反斜杠(它本身被转义)。