一个服务器与一个客户端实现半双工通信。
首先启动服务器监听,然后客户端连接到服务器
然后客户端对服务器发送信息,服务器也能回复信息以此循环
直到客户端发送“呵呵”之后关闭连接。
服务器代码:
package server; import java.io.*; import java.net.*; public class Server2 { public static void main(String[] args) { // TODO Auto-generated method stub Server2 s = new Server2(); } public Server2(){ try { ServerSocket ss = new ServerSocket(9999); System.out.println("开始监听"); Socket server = ss.accept(); //读取客户端传来数据的流 InputStreamReader isr = new InputStreamReader(server.getInputStream()); BufferedReader br = new BufferedReader(isr); //发给客户端数据的流 PrintWriter spw = new PrintWriter(server.getOutputStream(), true); //接收从控制台输入的信息 InputStreamReader isr2 = new InputStreamReader(System.in); BufferedReader br2 = new BufferedReader(isr2); while(true){ //接收从客户端发来的信息 String response = br.readLine(); System.out.println("客户端:" + response); if(response.equals("呵呵")){ server.close(); System.out.println("对话结束"); break; } //提示输入对客户端发送的信息 System.out.println("输入给客户端的信息:"); String info = br2.readLine(); //把控制台输入信息回送给客户端 spw.println(info); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
客户端代码:
package client; import java.io.*; import java.net.*; public class Client2 { public static void main(String[] args) { // TODO Auto-generated method stub Client2 c = new Client2(); } public Client2(){ try { Socket client = new Socket("127.0.0.1", 9999); System.out.println("建立连接"); //读取服务器发来的数据流 InputStreamReader isr = new InputStreamReader(client.getInputStream()); BufferedReader br = new BufferedReader(isr); //发送给服务器的流 PrintWriter cpw = new PrintWriter(client.getOutputStream(), true); //接收控制台的流 InputStreamReader isr2 = new InputStreamReader(System.in); BufferedReader br2 = new BufferedReader(isr2); while(true){ //提示输入 System.out.println("请输入往服务器发送的信息:"); String info = br2.readLine(); //发送给服务器 cpw.println(info); if(info.equals("呵呵")){ client.close(); System.out.println("对话结束"); break; } //接收从服务器发来的信息 String response = br.readLine(); System.out.println("服务器:"+response); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
先后运行服务器和客户端,然后到客户端的控制台发送信息,最后到服务器的控制台查看信息并回复信息即可。