import java.net.*;
import java.io.*;public class ChatServer {
public static void main(String args[]) {
InputStream is = null;
OutputStream os = null;
try {
ServerSocket ss = new ServerSocket(5678);
Socket socket = ss.accept();
is = socket.getInputStream();
os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader dis = new BufferedReader(new InputStreamReader(is));
PrintWriter pw = new PrintWriter(os);
System.out.println("Client:" + dis.readLine());
String s = br.readLine();
while(!s.equals("bye")) {
pw.write(s);
pw.flush();
System.out.println("Server:" + s);
System.out.println("Client:" + dis.readLine());
s = br.readLine();
}
pw.close();
dis.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.net.*;
import java.io.*;public class ChatClient {
public static void main(String args[]) {
InputStream is = null;
OutputStream os = null;
try {
Socket socket = new Socket("127.0.0.1", 5678);
is = socket.getInputStream();
os = socket.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader dis = new BufferedReader(new InputStreamReader(is));
PrintWriter pw = new PrintWriter(os);
String s = br.readLine();
while(!s.equals("bye")) {
pw.write(s);
pw.flush();
System.out.println("Client:" + s);
System.out.println("Server:" + dis.readLine());
s = br.readLine();
}
pw.close();
dis.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Socket 现在都是支持全双工的,那就是你的读取-对方写 和 你的写-对方读这两条线可以同时工作,因些很多情况下是为上面这两条流水线各开一条线程去处理。当然以后你再使用 NIO (异步非阻塞式的 socket)时,它是基于事件的方式工作,有数据时通知你读,能写的时候通知你写。就可以不用阻塞了。