业务背景:作为服务端,被动接收客户端推送过来的数据。
被动接收http传送的数据,作为服务端,在springboot的项目上实现。在yml或者properties文件中进行ip,path,port设置。
yml文件:
port: 6666
ip: 127.0.0.1
path: /test
业务实现(这里只支持http,已验证),另外为每一个请求建立一个线程进行处理,防止多个请求需要排队等待:
try {
//实现HTTP SERVER
HttpServer server = HttpServer.create(new InetSocketAddress(ip, Integer.parseInt(port)), 0);
server.createContext(path, new HttpHandler() {
@Override
public void handle(final HttpExchange httpExchange) throws IOException {
new Thread(new Runnable() {
@Override
public void run() {
if (httpExchange.getRequestMethod().equals(method)) {
try {
InputStream is = httpExchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\r\n");
}
//获取传送的值
System.out.println(sb.toString());
String response = "success";
// System.out.println("success");
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
is.close();
os.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}).start();
}
});
server.setExecutor(null);
server.start();
} catch (IOException e) {
e.printStackTrace();
}
使用postman进行测试,success。
延伸 - 支持https(未验证):
try {
//实现HTTPS SERVER
HttpsServer hss = HttpsServer.create(new InetSocketAddress(ip, Integer.parseInt(port)),0); //设置HTTPS端口
KeyStore ks = KeyStore.getInstance("JKS"); //建立证书库
ks.load(new FileInputStream("证书名" ), "密码"); //载入证书
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); //建立一个密钥管理工厂
kmf.init(ks, "密码"); //初始工厂
SSLContext sslContext = SSLContext.getInstance("SSLv3"); //建立证书实体
sslContext.init(kmf.getKeyManagers(), null, null); //初始化证书
HttpsConfigurator conf = new HttpsConfigurator(sslContext); //在https配置
hss.setHttpsConfigurator(conf); //在https server载入配置
hss .setExecutor(null);
hss .createContext(path, new HttpHandler() {
@Override
public void handle(final HttpExchange httpExchange) throws IOException {
new Thread(new Runnable() {
@Override
public void run() {
if (httpExchange.getRequestMethod().equals(method)) {
try {
InputStream is = httpExchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\r\n");
}
//获取传送的值
System.out.println(sb.toString());
String response = "success";
// System.out.println("success");
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
is.close();
os.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}).start();
}
});
hss .setExecutor(null);
hss .start();
} catch (IOException e) {
e.printStackTrace();
}
参考:
https://blog.csdn.net/qq_405930170/article/details/70770095