// order的数值越小,表示越优先执行
@Component
@Order(value = 1)
public class Test implements ApplicationRunner{
private static Socket socket;
// @Value注解获取配置文件中配置的值
@Value("${socket.server.port}")
private Integer port;
private InputStream inputStream = null;
private InputStreamReader inputStreamReader = null;
private BufferedReader bufferedReader = null;
@Override
public void run(ApplicationArguments args) throws Exception{
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器已启动,等待客户连接...");
// while(true)使得程序能够持续的处于监听状态
while(true){
// socket阻塞,当客户端未发请求时,处于阻塞状态
socket = serverSocket.accept();
inputStream = socket.getInputStream();
// 1、用byte数组接收
byte[]bytes=new byte[1024];
int len = inputStream.read(bytes);
// 有需要的话,可以将byte转为字符串,如下方法
String msg=new String(bytes,0,len);
// 2、用字符串接收
inputStreamReader =new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);
// 需要注意的是,readLine()必须读取的内容必须有换行符才能够读取到,否则会一直获取不到数据的
String msg2 = bufferedReader.readLine();
System.out.println("客户端说:"+msg2 );
// 服务端接收到数据之后,可以按照要求回复客户端
outputStream = socket.getOutputStream();
// 可以自行构建byte数组,数组内容为16进制内容
byte[]bytes2=new byte[]{0x56,0x65};
// 向客户端回复消息
outputStream.writer(bytes2);
inputStream.close();
inputStreamReader.close();
bufferedReader.close;
socket.close();
}
}
}
socket服务端:实现ApplicationRunner接口,建立socket长连接,连续监听客户端请求信息
最新推荐文章于 2023-08-16 16:29:07 发布