黑马程序员技术交流社区
标题:
read()和 readLine()以及write()阻塞方法出现了问题还是其他问题
[打印本页]
作者:
赵亚威
时间:
2013-4-2 21:37
标题:
read()和 readLine()以及write()阻塞方法出现了问题还是其他问题
本帖最后由 赵亚威 于 2013-4-3 18:58 编辑
package excercise;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket s=null;
try {
s=new Socket("127.0.0.1",10000);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
BufferedReader bwIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
while((line=br.readLine())!=null){
if("over".equals(line))
break;
pw.println(line);
String str=bwIn.readLine();
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class SocketServer{
public static void main(String[] args){
ServerSocket ss=null;
Socket s=null;
try {
ss=new ServerSocket(10000);
s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println("ip:"+ip);
BufferedReader bwIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
//BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
String line=null;
while((line=bwIn.readLine())!=null){
pw.println(line.toUpperCase());
//System.out.println();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
read()和readLine()以及write()阻塞方法 当输入中文时 无法返回 会卡屏或者卡死 这是神马情况
作者:
lucy198921
时间:
2013-4-2 21:57
ReadLine()是你输入一个东西后会换行.而Read()不会,要输入什么样的类型是由自己定义的.
write之后flush了吗?有的时候你写入的东西太短,socket会做缓冲的,flush会强制将缓冲的字节发送出去。
还有如果你用readLine读数据,记得给你用write发出去的内容里添加一个'\n',要不readLine是会lock在readLine里面的,直到读取到一个'\n'才会返回。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2