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();
}
}
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();
}
}
客户端运行结果
我收到你的问候咯,你好 客户端!
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);
}