我需要两个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);
}
}
答案 0 :(得分:0)
尝试使Server类实现Runnable,并将循环放在run()方法中(从Runnable中重写)。
完成后,您将必须创建服务器,然后启动它:new Thread(yourServerName).start();
通过这样做,您的服务器将“在后台”运行并收听输入通信,允许您同时运行其他进程。