客户端和服务器端都可以随意地发送内容
从终端输入
对聊
客户端:
主线程:接收终端输入 将终端的输入发送给服务器端
子线程:接收服务器端发过来的数据
服务器端:
主线程:接收终端输入 将终端输入发送给客户端
子线程:接收客户端发过来的数据
客户端
class Client{
public static void main(String[] args) throws IOException {
Socket socket=new Socket("127.0.0.1",8111);
//用一个子线程处理服务器端数据
new Thread(new ClientThread(socket)).start();
//主线程处理终端输入 发送给服务器端
BufferedReader keyin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps=new PrintStream(socket.getOutputStream());
String line=null;
while ((line=keyin.readLine())!=null){
ps.println(line);
}
}
}
创建一个子线程处理客户端接收服务器端数据
class ClientThread implements Runnable{
private Socket socket;
//保存操作的socket对象
public ClientThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
BufferedReader br=null;
try {
//获取服务器端的输入流对象
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//读取数据
String line=null;
while ((line=br.readLine())!=null){
System.out.println(line);
}
} catch (IOException e) {
// e.printStackTrace();
System.out.println("网络出错请重新登陆,张钰琪成功");
System.exit(-1);
}finally {
try {
if (br!=null){
br.close();
}
if (socket!=null){
socket.close();
}
}catch (IOException ex){
}
}
}
}
服务器端
class Server{
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket(8111);
//获取客户端的socket
Socket socket=ss.accept();
//创建子线程 处理客户端输入信息
new ServerThread(socket).start();
//终端输入流对象
BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));
//客户端的输出流对象
PrintStream ps=new PrintStream(socket.getOutputStream());
//读取终端的输入 将输入输出给客户端
String line=null;
while ((line=keyin.readLine())!=null){
ps.println(line);
}
}
}
创建一个子线程处理服务器端接收客户端的数据
class ServerThread extends Thread{
private Socket socket;
public ServerThread(Socket socket){
this.socket=socket;
}
@Override
public void run(){
BufferedReader br=null;
try {
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=null;
while ((line=br.readLine())!=null){
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭输入输出流
//关闭对应的socket连接
try {
if (br != null){
br.close();
}
if (socket != null){
socket.close();
}
}catch (IOException e){
}
}
}
}