写在前面:
之所以这次叫做学习报告,是因为第十五章着重考察的是应用部分,即实现一些通讯功能。在这里惜惜就只给大家奉上自己的执行代码啦
我才不承认自己是在高强度冲浪呢hhh
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try {
//向本机的4700端口发出客户请求
Socket socket = new
Socket("127.0.0.1", 4700);
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os = new PrintWriter(socket.getOutputStream());
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline = sin.readLine(); //从系统标准输入读入一字符串
while (!readline.equals("bye")) {
//将从系统标准输入读入的字符串输出到Server
System.out.println("自己:"+readline);
os.println(readline);
os.flush();//刷新输出流,使Server马上收到该字符串
readline=is.readLine();
System.out.println("Client2:" + readline);
readline = sin.readLine(); //从系统标准输入读入一字符串
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
}
import java.io.*;
import java.net.*;
public class TalkServer {
public static void main(String args[]) {
try {
ServerSocket server = null;
try {
//创建一个ServerSocket在端口4700监听客户请求
server = new ServerSocket(4700);
} catch (Exception e) {
System.out.println("can not listen to:" + e);
}
Socket socket = null;
Socket socket2 = null;
while (socket==null||socket2==null){
try {
//使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行
//这样保证了两个socket的建立。
if(socket==null) {
socket = server.accept();
}
else if(socket!=null){
socket2=server.accept();
}
} catch (Exception e) {
System.out.println("Error." + e);
}
}
String line;
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is = new BufferedReader(new
InputStreamReader(socket.getInputStream()));//is代表输入流
BufferedReader is2 = new BufferedReader(new
InputStreamReader(socket2.getInputStream()));
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os = new PrintWriter(socket.getOutputStream());//os代表输出流
PrintWriter os2 = new PrintWriter(socket2.getOutputStream());
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
BufferedReader sin2 = new BufferedReader(new InputStreamReader(System.in));
//在标准输出上打印从客户端读入的字符串
//到这里服务器已经收到了从客户端读入的字符串
//System.out.println("Client:" + is.readLine());
line =is.readLine();//从客户端1读入一字符串.
//注意下标,这里我们规定的是从客户段1向客户端2发送消息。
while (!line.equals("bye")) {//第一步,从1接受消息
os2.println(line); //第二步,向客户端2输出从客户端1传过来的该字符串
os2.flush(); //刷新输出流,使Client2马上收到该字符串
line = is2.readLine(); //第三步,从客户端2输入读入一字符串
os.println(line);
os.flush();
line = is.readLine();
}
os.close(); //关闭Socket输出流
os2.close();
is.close(); //关闭Socket输入流
is2.close();
socket.close(); //关闭Socket
socket2.close();
server.close(); //关闭ServerSocket
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
}
import java.io.*;
import java.net.*;
public class TalkClient2 {
public static void main(String args[]) {
try {
//向本机的4700端口发出客户请求
Socket socket = new
Socket("127.0.0.1", 4700);
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os = new PrintWriter(socket.getOutputStream());
//由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline = is.readLine(); //从系统标准输入读入一字符串
while (!readline.equals("bye")) {
System.out.println("Client1:" + readline);
readline = sin.readLine(); //从系统标准输入读入一字符串
System.out.println("自己:"+readline);
os.println(readline);
os.flush();//刷新输出流,使Server马上收到该字符串
readline = is.readLine(); //从服务器读入一字符串
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
}