这次只是对上次代码的回顾,以及添加了一点小功能:能供通过在控制台输入输出信息来模拟服务器和客户端的通讯,不过太过简单,只能按顺序一人一句,属于半双工,下一篇应该就是全双工的了!!
代码如下:
模拟服务器:
//增加功能 可以通过控制台输入输出信息 交换数据 package ServerTest2; import java.io.*; import java.net.*; public class MyServer2 { public MyServer2(){ try { //监听9999端口 ServerSocket ss = new ServerSocket(9999); System.out.println("我是服务器,我在9999端口进行监听"); //等待连接 Socket s = ss.accept(); while (true) { // 连接后接收来自客户端的消息 InputStreamReader isr = new InputStreamReader(s .getInputStream()); BufferedReader br = new BufferedReader(isr); String getinfo = br.readLine(); System.out.println("接收到:" + getinfo); if(getinfo.equals("bye")){ System.out.println("断开连接"); s.close(); break; } System.out.println("请输入要返回给客户端的信息:"); InputStreamReader isr2 = new InputStreamReader(System.in); BufferedReader br2 = new BufferedReader(isr2); PrintWriter pw = new PrintWriter(s.getOutputStream(), true); pw.println(br2.readLine()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub MyServer2 mc2 = new MyServer2(); } }
模拟客户端:
package ClientTest2; import java.net.*; import java.io.*; public class MyClient2 { public MyClient2(){ try { //连接本机9999端口 Socket s = new Socket("127.0.0.1",9999); System.out.println("连接成功!"); //连接后 向服务器发送信息 while(true){ System.out.println("请输入要发送给服务器的数据:"); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String outinfo = br.readLine(); PrintWriter pw =new PrintWriter(s.getOutputStream(),true); pw.println(outinfo); if(outinfo.equals("bye")){ System.out.println("断开连接"); s.close(); break; } //读取从服务器反馈回来的信息 InputStreamReader isr2 = new InputStreamReader(s.getInputStream()); BufferedReader br2 = new BufferedReader(isr2); System.out.println("收到服务器的反馈信息:"+br2.readLine()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { // TODO Auto-generated method stub MyClient2 mc2 = new MyClient2(); } }
运行结果:
服务器端:
客户端: