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

时间:2017-05-10 08:28:06

标签: java sockets java-threads

我需要两个java应用程序来跨两台计算机进行通信。一个是显示信息并接受用户输入的前端,另一个是在会话结束时存储它的服务器。服务器还有一个用于在系统中添加/删除用户的界面。

我已经让每个应用程序都能独立工作,并且我已经将通信设置为自己的工作。

现在我必须将我遇到的模块组合成一个我似乎无法解决的问题。

通信的“服务器”部分正在等待包的while(true)循环中运行。这使得将其集成到其他应用程序中有点困难。

我一直在读线程,认为我“只是”这样做,但复杂性让我有点困惑,所以我希望有人可以帮助我开始。

这是Server类中的代码。

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);
    }
}

1 个答案:

答案 0 :(得分:0)

尝试使Server类实现Runnable,并将循环放在run()方法中(从Runnable中重写)。

完成后,您将必须创建服务器,然后启动它:new Thread(yourServerName).start();

通过这样做,您的服务器将“在后台”运行并收听输入通信,允许您同时运行其他进程。