需要调用很多次readLine()才能接收完,而且次数是不确定。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
我觉得用readLine很正常啊,用个循环读,又不麻烦,何必这么费事替换呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
我觉得用readLine很正常啊,用个循环读,又不麻烦,何必这么费事替换呢?
调试欢乐多
或者通过DataOutputStream封装Socket的输出流,
DataOutputStream out=new DataOutputStream(new OutputStreamWriter(socekt.getOutputStream()));
然后out.writeUTF(str);
一次性发出,客户端用DataInputStream封装Socket的输入流,读入
DataInputStream out=new DataInputStream(new InputStreamWriter(socekt.getInputStream()));
in.readUTF();
读入;
}对方发送完了,就会结束这个循环.
println(explian); //这里的explian变量是JTextArea组件中输入的内容,其中可能含有多个回车
println(email); //这里的email是JTextField组件中输入的内容 我在接收方执行:
String name=readLin();
String explian=readLine();
String email=readLine();//如果JTextArea组件中含有多个回车,那么收到的Email绝对就不会是发送方中的println(email)中的那个email的值System.out.println("接收到的email:" + email);
String email=readLine();你根本就不知道explian和email的内容是什么了?:)
Socket通讯的话,肯定是要不停循环去读的,因为你不知道数据什么时候来
println(explian); //这里的explian变量是JTextArea组件中输入的内容,其中可能含有多个回车
println(email); //这里的email是JTextField组件中输入的内容 发送方
第一次发送的是:name
第二次发送的是explian
第三次发送的是email接收方根据发送方发送的顺序依次接收:String name=readLine();
String explain=readLine();
String email=readLine();关键的问题是如果在
explain中有多个回车,那么就会打乱了接收的内容。
所以,我以前都是在发送方执行替换:
println(explian.replaceAll("\n","!@#$&"));然后在接收方:
String explain=readLine().replaceAll("!@#$&","\n"); //再替换回来
可以在每发送完一个内容后用line.seperator设置分隔符,这样readLine()会返回null.