java Socket通信实例(二)

2014-11-24 09:21:59 · 作者: · 浏览: 4
{
private BufferedReader br;
private DataOutputStream dos;
private DataInputStream dis;
private Socket socket;
private boolean flag = true; // 用于控制循环结束

public Handler(Socket s) throws IOException {
this.br = new BufferedReader(new InputStreamReader(System.in)); // 用于从控制台接受输入的信息,再发送到服务器
this.socket = s;
this.dos = new DataOutputStream(this.socket.getOutputStream()); // 向服务器写数据的输出流
this.dis = new DataInputStream(this.socket.getInputStream()); // 获取服务器返回数据的输入流
}

@Override
public void run() {
while (flag) {
try {
String str = br.readLine();
if ("exit".equals(str)) { // 客户端终止发送信息标记 exit
this.br.close();
this.dos.writeUTF(str);
this.dos.flush();

String res = dis.readUTF();
System.out.println(res);

this.dis.close();
this.dos.close();
this.flag = false;
} else {
this.dos.writeUTF(str);// 每读一行就发送一行
this.dos.flush();
}

} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
遇到的问题:
最先考虑的是使用BufferedReader和BufferedWriter来完成双向数据的写入写出,但是发现BufferedWriter在fush()的时候并不能把从控制台得到的数据立即发送到服务端,就改用DataOutputStream数据流来完成双向数据传递。