题目:小明喜欢小红,小红只会回复小明的消息,小明要主动发送消息,但是一旦双方中的一人说出了“再见”,则关系结束。
如题,小红为服务端,小明为客户端,服务端先运行等待客户端的数据,然后将自己的数据返回客户端。
首先,我们先搭建好服务端。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class PS_Server {
public static void main(String[] args) {
try {
//创建服务端端口
ServerSocket serverSocket = new ServerSocket(5000);
//创建端口对象,存储服务端输入的数据
Socket socket = null;
while (true) {
System.out.println("等待数据中.........");
//接收端口传来的数据
socket = serverSocket.accept();
//将接受到的数据导入传输流中
InputStream is = socket.getInputStream();
//读取输入流中的内容
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String context;
while ((context = br.readLine()) != null) {
System.out.println("小明:" + context);
if (context.equals("再见")){
System.out.println("对面已关闭链接");
return;
}
}
//输入回复内容
Scanner in = new Scanner(System.in);
System.out.print("回复小明:");
String reply = in.next();
//将回复内容返回发送端,将回复内容输入到输出流
OutputStream os = socket.getOutputStream();
//转换为字节输出
os.write(reply.getBytes());
System.out.println("发送成功!");
if (reply.equals("再见")) {
break;
}
//关闭流
os.close();
br.close();
is.close();
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
接着,再搭建客户端。
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class PC_Client {
public static void main(String[] args) {
try {
while (true) {
//创建客户端端口
Socket socket = new Socket("localhost", 5000);
//将端口数据传入输出流
OutputStream os = socket.getOutputStream();
//输入需要发送的信息
System.out.print("正在向小红发送信息:");
Scanner in = new Scanner(System.in);
String reply = in.next();
//将信息发送
os.write(reply.getBytes());
System.out.println("发送成功!");
socket.shutdownOutput();//完成发送,关闭输出
if (reply.equals("再见")) {
break;
}
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String serverReply;
while ((serverReply = br.readLine()) != null) {
System.out.println("小红(主机):" + serverReply);
if (context.equals("再见")){
System.out.println("对面已关闭链接");
return;
}
}
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
当双方任意一人发送“再见”时,端口关闭,程序退出。