50 lines
1.5 KiB
Java
50 lines
1.5 KiB
Java
package tech.nevets.packetmirror;
|
|
|
|
import javax.swing.*;
|
|
import java.io.IOException;
|
|
import java.net.*;
|
|
|
|
public class UDPServer implements PServer {
|
|
private DatagramSocket s;
|
|
private boolean running = true;
|
|
|
|
public UDPServer(int port) throws SocketException {
|
|
s = new DatagramSocket(port);
|
|
}
|
|
|
|
@Override
|
|
public void start(JTextArea textArea, JLabel statusLabel, JLabel errorLabel) {
|
|
new Thread(() -> {
|
|
while (running) {
|
|
try {
|
|
byte[] buf = new byte[1024];
|
|
DatagramPacket packet = new DatagramPacket(buf, buf.length);
|
|
s.receive(packet);
|
|
|
|
InetAddress address = packet.getAddress();
|
|
int port = packet.getPort();
|
|
|
|
packet = new DatagramPacket(buf, packet.getLength(), address, port);
|
|
textArea.setText(new String(packet.getData(), 0, packet.getLength()));
|
|
|
|
s.send(packet);
|
|
} catch (IOException e) {
|
|
if (e.getMessage().toLowerCase().equals("socket closed")) {
|
|
statusLabel.setText("Client disconnected");
|
|
return;
|
|
}
|
|
statusLabel.setText("Error udpserver");
|
|
errorLabel.setText(e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
@Override
|
|
public void stop() {
|
|
running = false;
|
|
s.close();
|
|
}
|
|
}
|