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" 并监听输入的通信,允许您同时 运行 其他进程。
我需要两个 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" 并监听输入的通信,允许您同时 运行 其他进程。