Java:在 运行 其他进程时从套接字监听

Java: listening from socket while running other processes

我需要两个 java 应用程序来跨两台计算机进行通信。一个是显示信息和接受用户输入的前端,另一个是在会话结束时存储信息的服务器。该服务器还有一个与系统中 add/remove 用户的接口。

我已经让每个应用程序独立运行,并且我已经将通信设置为独立运行。

现在我必须将我已经 运行 的模块组合成一个我似乎无法解决的问题。

通信的 "server" 部分是 运行在 while(true) 循环中等待包裹。这使得将其集成到其他应用程序中有点困难。

我一直在阅读关于 Threads 的内容,我想我会 "just" 那样做,但目前它的复杂性让我有点困惑,所以我希望这里有人可以帮助我开始。

这是服务器中的代码 class。

private String[] str = new String[4];
private String sentence;
private InetAddress IPAddress;
private int port;

private byte[] receiveData = new byte[1024];
private byte[] sendData = new byte[1024];

private DatagramSocket serverSocket;

private void listen(int serverPort) {
    try {
        this.serverSocket = new DatagramSocket(serverPort);

        while (true) {
            receivePackage();
            splitPackage(this.sentence);
            sendConfirm();
        }

    } catch (SocketException ex) {
        System.out.println("UDP Port" + serverPort + "is unavailable.");
        System.exit(1);
    }
}

private void sendConfirm() {
    this.sendData= "RECEIVED".getBytes();
    DatagramPacket sendPacket = new DatagramPacket(this.sendData, this.sendData.length, this.IPAddress, this.port);
    try {
        this.serverSocket.send(sendPacket);
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
}

private void receivePackage() {
    this.receiveData = new byte[1024];

    DatagramPacket receivePacket = new DatagramPacket(this.receiveData, this.receiveData.length);

    System.out.println("Waiting for packet...");
    try {
        this.serverSocket.receive(receivePacket);

        this.sentence = new String(receivePacket.getData());

        this.IPAddress = receivePacket.getAddress();
        this.port = receivePacket.getPort();
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
}

private void splitPackage(String sentence) {
    this.str = sentence.split("\+");
    for (String s: this.str) {
        System.out.println(s);
    }
}

尝试让您的服务器 class 实现 Runnable,并将您的循环放入 运行() 方法(从 Runnable 覆盖)。

完成后,您只需创建服务器并启动它:new Thread(yourServerName).start();

通过这样做,您的服务器将 运行 "in the background" 并监听输入的通信,允许您同时 运行 其他进程。