diff --git a/src/main/java/info/istlab/ServerTester/App.java b/src/main/java/info/istlab/ServerTester/App.java index fbb6e19..e79d20d 100644 --- a/src/main/java/info/istlab/ServerTester/App.java +++ b/src/main/java/info/istlab/ServerTester/App.java @@ -35,6 +35,9 @@ EchoServer echo = new EchoServer(10008); myhost.addPanel(new ServerPanel(echo)); + ThreadEchoServer techo = new ThreadEchoServer(10018); + myhost.addPanel(new ServerPanel(techo)); + WhiteBoardServer wb = new WhiteBoardServer(11111); myhost.addPanel(new ServerPanel(wb)); diff --git a/src/main/java/info/istlab/ServerTester/EchoClient.java b/src/main/java/info/istlab/ServerTester/EchoClient.java index 14dada2..4e6a413 100644 --- a/src/main/java/info/istlab/ServerTester/EchoClient.java +++ b/src/main/java/info/istlab/ServerTester/EchoClient.java @@ -40,6 +40,7 @@ System.exit(1); // 異常終了(エラーで終了)なら1 } + System.out.println("終了するにはquitと入力してください"); // サーバーにメッセージを送る if (socket != null && dos != null && isbr != null) { try { @@ -54,7 +55,7 @@ break; String s = stdinbr.readLine(); - System.out.println(s); + // System.out.println(s); dos.writeBytes(s + "\n"); } diff --git a/src/main/java/info/istlab/ServerTester/EchoServer.java b/src/main/java/info/istlab/ServerTester/EchoServer.java index 70e9f7c..ccce1b6 100644 --- a/src/main/java/info/istlab/ServerTester/EchoServer.java +++ b/src/main/java/info/istlab/ServerTester/EchoServer.java @@ -27,7 +27,7 @@ PrintStream os; String line; // サーバ側の処理の繰り返し - while (true) { + while (thread != null) { try { clientSocket = serverSocket.accept(); // 接続がくるまで、ここで待つ System.out.println("accept"); diff --git a/src/main/java/info/istlab/ServerTester/Host.java b/src/main/java/info/istlab/ServerTester/Host.java index 4039c84..f28b418 100644 --- a/src/main/java/info/istlab/ServerTester/Host.java +++ b/src/main/java/info/istlab/ServerTester/Host.java @@ -5,6 +5,7 @@ import javax.swing.JPanel; public class Host extends JFrame { + public static Host host; public JPanel mainPanel; public Host() { setTitle("Host"); @@ -15,6 +16,7 @@ mainPanel = new JPanel(); mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); add(mainPanel); + host = this; } public void addPanel(JPanel panel) { diff --git a/src/main/java/info/istlab/ServerTester/Server.java b/src/main/java/info/istlab/ServerTester/Server.java index d85c5fe..c46c676 100644 --- a/src/main/java/info/istlab/ServerTester/Server.java +++ b/src/main/java/info/istlab/ServerTester/Server.java @@ -22,7 +22,7 @@ System.err.println("ポート番号またはバインドアドレスを変更してください。"); System.err.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。"); } - System.out.println(getClass().getName()+" [" + bindaddress + ":" + port + "] started."); + System.out.println(getClass().getName() + " [" + bindaddress + ":" + port + "] started."); } public void handleRequest() { @@ -69,4 +69,23 @@ public int getExpectedPort() { return expectedPort; } + + public void restart() { + try { + serverSocket = new ServerSocket(); + serverSocket.bind(new InetSocketAddress(expectedAddress, expectedPort)); + start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void close() { + try { + serverSocket.close(); + } catch (IOException e) { + System.err.println(e); + } + thread = null; + } } diff --git a/src/main/java/info/istlab/ServerTester/ServerPanel.java b/src/main/java/info/istlab/ServerTester/ServerPanel.java index 2e5caeb..a3dbecb 100644 --- a/src/main/java/info/istlab/ServerTester/ServerPanel.java +++ b/src/main/java/info/istlab/ServerTester/ServerPanel.java @@ -17,7 +17,7 @@ JLabel portLabel; JLabel addressLabel; JLabel statusLabel; - + JButton stopButton; Thread thread; /** @@ -40,8 +40,15 @@ statusLabel = new JLabel(); add(statusLabel); - JButton btnNewButton = new JButton("Start"); - add(btnNewButton); + stopButton = new JButton("Start"); + add(stopButton); + stopButton.addActionListener(e -> { + if (server.isClosed()) { + server.restart(); + } else { + server.close(); + } + }); JButton clientButton = new JButton("Client"); add(clientButton); @@ -75,11 +82,14 @@ portLabel.setText(String.valueOf(server.getExpectedPort())); addressLabel.setText(server.getExpectedAddress()); statusLabel.setText("Closed (Bind Failed?)"); + stopButton.setText("Restart"); } else { portLabel.setText(String.valueOf(server.getPort())); addressLabel.setText(server.getBindAddress()); statusLabel.setText("Running"); + stopButton.setText("Stop"); } + Host.host.pack(); try { Thread.sleep(1000); } catch (InterruptedException e) { @@ -87,5 +97,4 @@ } } } - } diff --git a/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java b/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java index 3ed3b4c..d03f219 100644 --- a/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java +++ b/src/main/java/info/istlab/ServerTester/ThreadEchoServer.java @@ -4,26 +4,56 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; -import java.net.InetSocketAddress; -import java.net.ServerSocket; import java.net.Socket; -public class ThreadEchoServer implements Runnable { +public class ThreadEchoServer extends Server { + public ThreadEchoServer() { + this(10008); + } + + public ThreadEchoServer(int port) { + this(port, "127.0.0.1"); + } + + public ThreadEchoServer(int port, String bindaddress) { + super(port, bindaddress); + start(); + } + + public void handleRequest() { + if (!serverSocket.isBound()) { + try { + serverSocket.close(); + } catch (IOException e) { + } + return; + } + while (serverSocket.isBound()) { + try { + Socket socket = serverSocket.accept(); + System.out.println("---\nConnection Requst from: " + (socket.getInetAddress())); + new RequestHandler4TES(socket); + } catch (IOException e) { + thread = null; + } + } + } +} + +class RequestHandler4TES implements Runnable { Socket sock; Thread thread; - ThreadEchoServer(Socket sc) { - sock = sc; + RequestHandler4TES(Socket s) { + sock = s; thread = new Thread(this); - thread.start(); // 別のスレッドでrun()を動作させる。メインのスレッドはrun()の終了を待たずにmain()に戻る + thread.start(); } - @Override - public void run() { - String line = null; - BufferedReader br = null; - PrintStream os = null; - + public void run() { + PrintStream os; + BufferedReader br; + String line; System.out.println("accept"); try { br = new BufferedReader(new InputStreamReader(sock.getInputStream())); @@ -40,41 +70,4 @@ System.out.println("disconnected " + sock.toString()); } } - - @SuppressWarnings("resource") - public static void main(String args[]) { - // ソケットの宣言 - ServerSocket echoServer = null; - Socket clientSocket = null; - - if (args.length < 2) { // 引数の数が2つ未満の場合、以下の設定を用いる。(変更したら再コンパイルが必要) - args = new String[2]; - args[0] = "127.0.0.1"; - // ポート9999番を開く - args[1] = "9999"; - } - String bindaddress = args[0]; - int port = Integer.parseInt(args[1]); - try { - echoServer = new ServerSocket(); - echoServer.bind(new InetSocketAddress(bindaddress, port)); // サーバソケットにバインドする=ポートでの待ち受け開始 - } catch (IOException e) { - System.err.println(e); - System.err.println("バインド失敗。ポート番号 "+port+" (Bind-address: "+bindaddress+" 向け) がすでにつかわれているようです"); - System.err.println("ポート番号またはバインドアドレスを変更してください。"); - System.out.println("またはコマンド killall java を実行して全てのJavaプロセスを終了してください。"); - System.exit(1); - } - System.out.println("ThreadEchoServer ["+bindaddress+":"+port+"] started."); - - while (true) { - // クライアントからの要求を受けるソケットを開く - try { - clientSocket = echoServer.accept(); - } catch (IOException e) { - e.printStackTrace(); - } - new ThreadEchoServer(clientSocket); //クライアントからの要求をスレッドで捌く - } - } -} +} \ No newline at end of file diff --git a/src/main/java/info/istlab/ServerTester/TimeServer.java b/src/main/java/info/istlab/ServerTester/TimeServer.java index 7913b05..9ec189b 100644 --- a/src/main/java/info/istlab/ServerTester/TimeServer.java +++ b/src/main/java/info/istlab/ServerTester/TimeServer.java @@ -26,7 +26,7 @@ Date d; // 日付時刻処理用オブジェクト // サーバ側の処理の繰り返し - while (true) { + while (thread != null) { try { clientSocket = serverSocket.accept(); // 接続がくるまで、ここで待つ System.out.println("(TimeServer) accepted (client has connected)"); diff --git a/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java b/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java index de2738f..d9264f0 100644 --- a/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java +++ b/src/main/java/info/istlab/ServerTester/WhiteBoardClient.java @@ -28,6 +28,7 @@ BufferedReader reader = null; PrintWriter writer = null; Thread thread; + int lastx, lasty; public WhiteBoardClient(int port, String address) { address = address.replace("/", ""); @@ -61,7 +62,12 @@ @Override public void mouseDragged(MouseEvent e) { + if (e.getX()==lastx && e.getY()==lasty) { + return; + } tmpStroke.add(e.getPoint()); + lastx = e.getX(); + lasty = e.getY(); repaint(); } @@ -77,11 +83,13 @@ public void mousePressed(MouseEvent e) { tmpStroke = new ArrayList(); tmpStroke.add(e.getPoint()); + lastx = e.getX(); + lasty = e.getY(); } @Override public void mouseReleased(MouseEvent e) { - tmpStroke.add(e.getPoint()); + // tmpStroke.add(e.getPoint()); int[][] pts = new int[tmpStroke.size()][2]; for (int i = 0; i < tmpStroke.size(); i++) { pts[i][0] = tmpStroke.get(i).x; @@ -188,12 +196,13 @@ sb.append(","); } } + sb.append("]"); return sb.toString(); } // convert JSON to int[][] public static int[][] fromJSON(String json) { - json = json.substring(2, json.length() - 1).replaceAll("\\],\\[", "_"); + json = json.substring(2, json.length() - 2).replaceAll("\\],\\[", "_"); String[] points = json.split("_"); int[][] pts = new int[points.length][2]; for (int i = 0; i < points.length; i++) {