1.首先建立服务端程序
/**
* @ClassName: Question1
* @Description: 编写一个服务器端/客户端程序,对客户输入的字符串,服务器端以“客户端:”开头再返回
* @Author:
* @Date: 2019/6/10
*/
public class Question1 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);//绑定指定端口
System.out.println("服务端启动。。。");
while (true){
Socket socket = serverSocket.accept();//监听端口
System.out.println("监听端口。。。");
new Thread(new ServerThread(socket)).start();//启动线程
}
}
}
2.建立服务器端多线程,用于循环监听客户端输入的内容,并加以处理后返回给客户端
/**
* @ClassName: ServerThread
* @Description: 对客户端传递过来的内容进行处理后再返回给客户端
* @Author:
* @Date: 2019/6/10
*/
public class ServerThread implements Runnable {
public Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//输出内容
try {
//读取客户端传递过来的内容
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true){
String readLine = br.readLine();
String cliStr = "客户端:"+readLine;//将客户端传递过来的内容加前缀并写回客户端
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println(cliStr);
pw.flush();
System.out.println("客户端内容:"+readLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.编写客户端程序
/**
* @ClassName: ClientQuest
* @Description: 客户端程序
* @Author:
* @Date: 2019/6/10
*/
public class ClientQuest {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost",8888);
System.out.println("请输入内容:");
while (true){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//读取控制台输入的内容
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println(br.readLine());//将读取的内容写入到服务器
pw.flush();//刷新缓存
new Thread(new ClientThread(socket)).start();
}
}
}
4.编写客户端多线程,用于多次输入内容,将控制台输入的内容传递给服务端,并将服务端处理后的内容输出到控制台
/**
* @ClassName: ClientThread
* @Description:
* @Author:
* @Date: 2019/6/10
*/
public class ClientThread implements Runnable {
public Socket socket;
public ClientThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader br2 = null;
try {
//读取服务端传递过来的内容
br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readLine = br2.readLine();
System.out.println("服务端返回的内容:");
//输出内容
System.out.println(readLine);
} catch (IOException e) {
e.printStackTrace();
}
}
}
依次启动服务器端和客户端
测试结果:
客户端:
请输入内容:
客户端测试1
服务端返回的内容:
客户端:客户端测试1
客户端测试2
服务端返回的内容:
客户端:客户端测试2
服务端:
服务端启动。。。
监听端口。。。
客户端内容:客户端测试1
客户端内容:客户端测试2