题目
- 客户端:发送一条数据,接收服务端反馈的消息并打印
- 服务端:接收数据并打印,再给客户端反馈消息
代码实战
1、客户端代码
package com.hidata.hiops.paas.demo; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; /** * @Description : 客户端 * @Date: 2023-09-27 10:08 */ public class Client { public static void main(String[] args) throws IOException { //创建Socket客户端对象并连接服务端 Socket socket = new Socket("127.0.0.1",10001); //获取输出流 OutputStream ops = socket.getOutputStream(); String str = "你好,服务端"; ops.write(str.getBytes()); //给服务器写一个结束标记 socket.shutdownOutput(); //接收服务端回写的数据 InputStreamReader isr = new InputStreamReader(socket.getInputStream()); int b; while ((b = isr.read()) != -1){ System.out.print((char)b); } //释放资源 socket.close(); } }
2、服务端代码
package com.hidata.hiops.paas.demo; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** • @Description :服务端 • @Date: 2023-09-27 10:16 */ public class Server { public static void main(String[] args) throws IOException {
//创建服务端对象并绑定端口10001 ServerSocket serverSocket = new ServerSocket(10001); //等待客户端来连接 Socket socket = serverSocket.accept(); //读取数据 InputStreamReader isr = new InputStreamReader(socket.getInputStream()); int b; while ((b = isr.read()) != -1){ System.out.print((char)b); } //回写给客户端 OutputStream ops = socket.getOutputStream(); ops.write("我收到你的问候咯,你好 客户端!".getBytes()); //释放资源 socket.close(); serverSocket.close();
- }
}
3、运行结果
客户端运行结果
我收到你的问候咯,你好 客户端! Process finished with exit code 0
服务端运行结果
你好,服务端 Process finished with exit code 0
总结
本练习题的核心之处在于:客户端在接收服务端反馈的消息之前,要加上 这句代码
socket.shutdownOutput();
表示 给服务端加一个标记,告诉服务端,客户端这边的数据已经写完了,否则服务端程序会一直停在read方法这里,等待读取下面的数据
while ((b = isr.read()) != -1){ System.out.print((char)b); }