项目背景:java开的桌面程序需要打开浏览器,并且要深度交互,而且要跨平台。(之前考虑过cef,但是在linux编译太麻烦,放弃)
这就需要java进程与另外一个浏览器进程要并互,并且与浏览器javascript要交互
跨进程交互有几种形式:
- 1.内存共享,java使用JNI与之交互,因为交互量数据不大,所以放弃
- 2.消息,这种没有试过放弃
- 3.管道,这个不用的原因是管道是单向的,而且要跨平台,java这边需要编写两个JNI程序
- 4.Socket通信,我采用的是这个,使用的是TCP,其实还可以使用UDP通信的,毕竟是本机
java端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8555);
System.out.println("服务器准备就绪");
System.out.println("服务器端信息:"+serverSocket.getInetAddress()+":"+serverSocket.getLocalPort());
for(;;){
Socket socket=serverSocket.accept();
new ClientHandler(socket).start();
}
}
//发送数据到浏览器_测试
public static class WriteHandler extends Thread{
PrintStream printStream;
private boolean flag=true;
public WriteHandler(PrintStream printStream){
this.printStream=printStream;
}
@Override
public void run() {
while(flag){
printStream.println("server:");
try {
T