代码小白。对socket通信这块不了解,现在手上正好有个急事关于这个。主要内容就是第三方通过socket通信调用我的机器发送xml报文,自己测试的时候写了个main函数serversocket,但是实际上最后要部署到生产,main函数肯定不行,看网上说什么监听器、守护进程之类的根本不懂…还请大神们指导指导,最好简单源码支持下,万分感谢!
socket服务类
package com.socket.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MytSocketServer {
//服务监听端口号
private int serverPort = 10002;
//socket服务类
private ServerSocket socketServer;
//socket服务监听线程
private ServerThread serverThread;
public void initSocketServer() {
}
public void startServer() {
try {
//启动服务
socketServer = new ServerSocket(serverPort);
} catch (IOException e) {
System.out.println("初始化SSLServer失败[IO异常]: " + e.getMessage());
System.exit(0);
}
serverThread = new ServerThread();
Thread workThread = new Thread(serverThread);
workThread.start();
}
class ServerThread implements Runnable {
@Override
public void run() {
while (true) {
Socket socket = null;
try {
//监控端口,没有连接时阻塞,
socket = socketServer.accept();
//有连接,交给线程BusinessThread处理,让服务可以继续监控端口
new Thread(new BusinessThread(socket)).start();
} catch (IOException e) {
System.out.println("处理remote socket失败: " + e.getMessage());
}
try {
//这里可以按需要设置时间间隔,业务多间隔就短点,反之就长点
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
}
}
}
业务处理线程类
package com.socket.server;
import java.net.Socket;
public class BusinessThread implements Runnable {
private Socket socket;
public BusinessThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//从socket中读取完整消息
String xml = readXml();
//一下进行其他处理
}
private String readXml() {
// TODO Auto-generated method stub
return null;
}
}
测试类
package com.socket.server;
public class Test {
public static void main(String[] args) {
MytSocketServer sever = new MytSocketServer();
sever.initSocketServer();
}
}
部署到生产,先安装jdk
第三方条用你的机器发送xml?是访问你的socket server,发xml给你的机器吧
测试代码换个位置就行了,你把代码放到springboot启动时加载的类里面,启动的时候顺便启动你的socket服务就行。如果只是为了用socket你的服务里面没有其它东西的话。直接用你的带main方法的代码打个包放到服务器上启动也是没有问题的。