这次只是对上次代码的回顾,以及添加了一点小功能:能供通过在控制台输入输出信息来模拟服务器和客户端的通讯,不过太过简单,只能按顺序一人一句,属于半双工,下一篇应该就是全双工的了!!
代码如下:
模拟服务器:
//增加功能 可以通过控制台输入输出信息 交换数据
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();
}
}
运行结果:
服务器端:
客户端: