回答編集履歴

1

コード追加

2022/06/30 11:14

投稿

jimbe
jimbe

スコア12545

test CHANGED
@@ -1,2 +1,94 @@
1
1
  クライアント UWP 側は分かりませんのでサーバ java 側だけ。
2
2
  reader と reader2 という 2 つの BufferedReader を 1 つの socket.getInputStream から作成していますが、そのようなことはできません。
3
+
4
+ ---
5
+ ご提示の java のサーバは以下のような感じで動作・テスト出来ます。
6
+ 一問一答形式で"bye"が来るまで数値の奇数/偶数を判断するサーバということになりますが、クラアントに対するサーバとして妥当な機能なのでしょうか。
7
+
8
+ Server.java
9
+ ```java
10
+ package teratail_java.q_6p00dtc71nk50f;
11
+
12
+ import java.io.*;
13
+ import java.net.ServerSocket;
14
+ import java.net.Socket;
15
+
16
+ public class Server {
17
+ public static void main(String[] args) throws IOException {
18
+ try(ServerSocket ss = new ServerSocket(3333);) {
19
+ System.out.println("クライアントからの接続待ち");
20
+ try(Socket s = ss.accept();
21
+ BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
22
+ PrintWriter writer = new PrintWriter(s.getOutputStream(), true);) {
23
+ System.out.println("接続");
24
+ while(true) {
25
+ String line = reader.readLine();
26
+ System.out.println("1 " + line);
27
+
28
+ if(line.equals("bye")) {
29
+ System.out.println("2");
30
+ break;
31
+ }
32
+
33
+ try {
34
+ int num = Integer.parseInt(line);
35
+ writer.println(num % 2 == 0 ? "OK" : "NG");
36
+ } catch(NumberFormatException e) {
37
+ writer.println("数値を入力して下さい");
38
+ }
39
+ System.out.println("クライアントで入力された文字=" + line);
40
+ }
41
+ } catch(Exception e) {
42
+ e.printStackTrace();
43
+ }
44
+ }
45
+ System.out.println("サーバー側終了です");
46
+ }
47
+ }
48
+ ```
49
+ Client.java
50
+ ```java
51
+ package teratail_java.q_6p00dtc71nk50f;
52
+
53
+ import java.io.*;
54
+ import java.net.Socket;
55
+ import java.net.UnknownHostException;
56
+
57
+ public class Client {
58
+ public static void main(String[] args) throws UnknownHostException, IOException {
59
+ try(Socket s = new Socket("127.0.0.1", 3333);
60
+ BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
61
+ PrintWriter pw = new PrintWriter(s.getOutputStream(), true);) {
62
+
63
+ for(String arg : args) {
64
+ pw.println(arg);
65
+ String line = br.readLine();
66
+ System.out.println(line);
67
+ }
68
+ pw.println("bye");
69
+ }
70
+ }
71
+ }
72
+ ```
73
+ 実行結果(Server)
74
+ ```plain
75
+ >java teratail_java.q_6p00dtc71nk50f.Server
76
+ クライアントからの接続待ち
77
+ 接続
78
+ 1 123
79
+ クライアントで入力された文字=123
80
+ 1 abc
81
+ クライアントで入力された文字=abc
82
+ 1 86
83
+ クライアントで入力された文字=86
84
+ 1 bye
85
+ 2
86
+ サーバー側終了です
87
+ ```
88
+ 実行結果(Client)
89
+ ```plain
90
+ >java teratail_java.q_6p00dtc71nk50f.Client 123 abc 86
91
+ NG
92
+ 数値を入力して下さい
93
+ OK
94
+ ```