import java.io.*; import java.net.*; public class Lab5Server { public static void main(String[] args) { int port = 1000; try { Server server = new Server(port); server.start(); } catch (IOException e) { e.printStackTrace(); } } } class Handler extends Thread { private Silhouette area; DatagramPacket receivePacket; byte[] sendData = new byte[1024]; public Handler(DatagramPacket receivePacket) { this.receivePacket = receivePacket; } public void run() { String sentence = new String(receivePacket.getData()); String[] point_str = sentence.split(";"); float x = Float.valueOf(point_str[0]); float y = Float.valueOf(point_str[1]); float R = Float.valueOf(point_str[2]); this.area = new Silhouette(R); boolean result = true; result = area.IsHit(new Mark(x, y)); sendData = String.valueOf(result).getBytes(); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); try { Server.socket.send(sendPacket); } catch (IOException e) { e.printStackTrace(); } } } class Server { static DatagramSocket socket; public Server(int port) throws IOException { this.socket = new DatagramSocket(port); } public void start() { while (true) { try { DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024); socket.receive(receivePacket); if (receivePacket.getData() != null) { new Handler(receivePacket).start(); } } catch (SocketTimeoutException s) { System.out.println("Socket timed out!"); break; } catch (IOException e) { System.out.println("IO exception!" + e); break; } } } } class Mark { float x, y; public Mark(float x, float y) { this.x = x; this.y = y; } } class Silhouette { float R; public Silhouette(float r) { this.R = r; } public void setR(float r) { this.R = r; } public float getR() { return R; } public boolean IsHit(Mark m) { if (m.y >= 0 && m.x <= 0 && m.y <= m.x + R / 2 || m.y <= 0 && m.x >= 0 && m.x <= R && m.y >= -R || m.y <= 0 && m.x <= 0 && Math.pow(m.x, 2) + Math.pow(m.y, 2) <= Math.pow(R / 2, 2)) { return true; } else { return false; } } }