這次只是對上次代碼的回顧,以及添加了一點小功能:能供通過在控制檯輸入輸出信息來模擬服務器和客戶端的通訊,不過太過簡單,只能按順序一人一句,屬於半雙工,下一篇應該就是全雙工的了!!
代碼如下:
模擬服務器:
//增加功能 可以通過控制檯輸入輸出信息 交換數據
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();
}
}
運行結果:
服務器端:
客戶端: