diff --git a/src/main/java/info/istlab/ServerTester/App.java b/src/main/java/info/istlab/ServerTester/App.java index 2eda36a..c56ff05 100644 --- a/src/main/java/info/istlab/ServerTester/App.java +++ b/src/main/java/info/istlab/ServerTester/App.java @@ -69,7 +69,6 @@ // 近隣のホスト情報を集めるUDPサーバ // myhost.setUdpServer(new UDPServer(54320)); - new MulticastSender(); - new MulticastReceiver(); + myhost.setMulticastReceiver(new MulticastReceiver(54320)); } } diff --git a/src/main/java/info/istlab/ServerTester/Host.java b/src/main/java/info/istlab/ServerTester/Host.java index e4442bd..367f4da 100644 --- a/src/main/java/info/istlab/ServerTester/Host.java +++ b/src/main/java/info/istlab/ServerTester/Host.java @@ -14,7 +14,7 @@ public static Host mainhost; public JPanel mainPanel; - public UDPServer udpServer; + public MulticastReceiver multicastReceiver; public Host() { setTitle("サーバ管理ウィンドウ"); @@ -34,8 +34,8 @@ // udpServer = new UDPServer(); } - public void setUdpServer(UDPServer udpServer) { - this.udpServer = udpServer; + public void setMulticastReceiver(MulticastReceiver mr) { + multicastReceiver = mr; } private void setupMenu() { @@ -44,35 +44,35 @@ JMenu menu = new JMenu("Menu"); menuBar.add(menu); - JMenu channel = new JMenu("班の番号を選択(UDPサーバの再起動)"); + JMenu channel = new JMenu("班の番号を選択(マルチキャストアドレスの変更)"); menu.add(channel); for (int i = 0; i <= 9; i++) { JMenuItem item = new JMenuItem(String.valueOf(i)); channel.add(item); item.addActionListener(e -> { System.out.println("班の番号: " + item.getText()); - if (udpServer != null) { - udpServer.stop(); + if (multicastReceiver != null) { + multicastReceiver.stop(); try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } } - udpServer = new UDPServer(54320 + Integer.parseInt(item.getText())); // 54320 + 班の番号 のポート番号で待つ + multicastReceiver = new MulticastReceiver(54320 + Integer.parseInt(item.getText())); // 54320 + 班の番号 のポート番号で待つ }); } - JMenuItem sendItem = new JMenuItem("このホストのサーバ情報をブロードキャストで送信"); - menu.add(sendItem); - sendItem.addActionListener(e -> { - new UDPClient(mainPanel, udpServer.port); - }); + // JMenuItem sendItem = new JMenuItem("このホストのサーバ情報をブロードキャストで送信"); + // menu.add(sendItem); + // sendItem.addActionListener(e -> { + // new UDPClient(mainPanel, udpServer.port); + // }); JMenuItem showItem = new JMenuItem("近隣ホストのサーバ情報を表示"); menu.add(showItem); showItem.addActionListener(e -> { - udpServer.openWindow(); + multicastReceiver.openWindow(); }); menu.addSeparator(); diff --git a/src/main/java/info/istlab/ServerTester/MulticastReceiver.java b/src/main/java/info/istlab/ServerTester/MulticastReceiver.java index 7d647a9..534d812 100644 --- a/src/main/java/info/istlab/ServerTester/MulticastReceiver.java +++ b/src/main/java/info/istlab/ServerTester/MulticastReceiver.java @@ -4,18 +4,22 @@ import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; +import java.net.SocketException; import java.util.Hashtable; +import javax.swing.JOptionPane; + public class MulticastReceiver implements Runnable{ Thread thread; MulticastSocket socket; + MulticastSender sender; // 受信したデータを IP アドレスをキーにして保存 Hashtable receivedData = new Hashtable(); - public MulticastReceiver() { + public MulticastReceiver(int portNum) { try { - socket = new MulticastSocket(54320); + socket = new MulticastSocket(portNum); InetAddress group = InetAddress.getByName("224.0.0.1"); socket.joinGroup(group); } catch (IOException e) { @@ -23,6 +27,7 @@ } thread = new Thread(this); thread.start(); + sender = new MulticastSender(portNum); } public void run(){ @@ -31,6 +36,8 @@ DatagramPacket packet = new DatagramPacket(buffer, buffer.length); try { socket.receive(packet); + } catch(SocketException sx) { + thread = null; } catch (IOException e) { e.printStackTrace(); } @@ -39,7 +46,19 @@ receivedData.put(addr, message); System.out.println(addr+"からの受信: " + message); - } } + public void stop(){ + socket.close(); + sender.stop(); + // thread = null; + } + + public void openWindow() { + if (receivedData.size() == 0) { + JOptionPane.showMessageDialog(Host.mainhost, "受信したデータがありません。", "受信データなし", JOptionPane.WARNING_MESSAGE); + return; + } + new RemoteHostsWindow(receivedData); + } } diff --git a/src/main/java/info/istlab/ServerTester/MulticastSender.java b/src/main/java/info/istlab/ServerTester/MulticastSender.java index 606550b..713bfdc 100644 --- a/src/main/java/info/istlab/ServerTester/MulticastSender.java +++ b/src/main/java/info/istlab/ServerTester/MulticastSender.java @@ -12,15 +12,14 @@ Thread thread; MulticastSocket socket = null; - public String message; - String multicastAddress = "224.0.0.1"; // マルチキャストアドレス public int port = 54320; InetAddress group; - public MulticastSender() { + public MulticastSender(int portNum) { + port = portNum; try { socket = new MulticastSocket(); - group = InetAddress.getByName(multicastAddress); + group = InetAddress.getByName("224.0.0.1"); } catch (IOException e) { e.printStackTrace(); } @@ -41,14 +40,15 @@ } catch (IOException e) { e.printStackTrace(); } - try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } - + } + public void stop(){ + thread = null; } private String getServerInfo() { diff --git a/src/main/java/info/istlab/ServerTester/UDPServer.java b/src/main/java/info/istlab/ServerTester/UDPServer.java index ddb64e5..6368c45 100644 --- a/src/main/java/info/istlab/ServerTester/UDPServer.java +++ b/src/main/java/info/istlab/ServerTester/UDPServer.java @@ -94,11 +94,5 @@ } } - public void openWindow() { - if (receivedData.size() == 0) { - JOptionPane.showMessageDialog(Host.mainhost, "受信したデータがありません。", "受信データなし", JOptionPane.WARNING_MESSAGE); - return; - } - new RemoteHostsWindow(receivedData); - } + }