teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

ソースコードの変更

2018/12/25 10:31

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -16,43 +16,35 @@
16
16
  import java.net.Socket;
17
17
 
18
18
  class
19
- MultiClientSample
19
+ MineSweeperClient
20
20
  {
21
21
  public static void main(String[] args)
22
22
  {
23
-
24
- new MultiClientSample();
23
+ new MineSweeperClient();
25
24
  }
26
25
 
27
- MultiClientSample(){//コンストラクター
26
+ MineSweeperClient(){//コンストラクター
28
27
  String hostname="localhost";
29
- //String hostname="133.27....";//おとなりのipaddress
30
28
 
29
+ Result result;
30
+ MineThread mineThread = new MineThread();
31
+ result = mineThread.getResult();
32
+
31
- doClientJob(hostname,"message hello1");
33
+ doClientJob(hostname,result);
32
34
  }
33
35
 
34
- public void doClientJob(String hostname,String msg)
36
+ public void doClientJob(String hostname,Result result)
35
37
  {
36
38
  try {
37
-
38
- //アドレス情報を保持するsocketAddressを作成。
39
- //ポート番号は5000
40
39
  InetSocketAddress socketAddress =
41
- new InetSocketAddress(hostname, 5000);
40
+ new InetSocketAddress(hostname, 5002);
42
41
 
43
- //socketAddressの値に基づいて通信に使用するソケットを作成する。
44
-
45
42
  //
46
43
  Socket socket = new Socket();
47
- //タイムアウトは10秒(10000msec)
48
44
  socket.connect(socketAddress, 10000);
49
45
 
50
- //接続先の情報を入れるInetAddress型のinadrを用意する。
51
46
  InetAddress inadr;
52
47
 
53
- //inadrにソケットの接続先アドレスを入れ、nullである場合には
54
- //接続失敗と判断する。
55
- //nullでなければ、接続確立している。
56
48
  if ((inadr = socket.getInetAddress()) != null) {
57
49
  System.out.println("Connect to " + inadr);
58
50
  }else {
@@ -60,29 +52,15 @@
60
52
  return;
61
53
  }
62
54
 
63
- //メッセージの送信処理
64
- //コマンドライン引数の2番目をメッセージとする。
65
- Result result;
66
- MineThread mineThread = new MineThread();
67
- result = mineThread.getResult();
68
-
69
- //PrintWriter型のwriterに、ソケットの出力ストリームを渡す。(Auto Flush)
70
55
  PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
71
- //ソケットの入力ストリームをBufferedReaderに渡す。
72
56
  BufferedReader rd =
73
57
  new BufferedReader(new InputStreamReader( socket.getInputStream()));
74
58
 
75
- //ソケットから出力する。
76
59
  writer.println(result);
77
60
 
78
- //もしPrintWriterがAutoFlushでない場合は,以下が必要。
79
-
80
- //サーバーからのメッセージ読み取り
81
61
  String getline=rd.readLine();
82
62
  System.out.println("you : " + getline);
83
63
 
84
- //終了処理
85
-
86
64
  rd.close();
87
65
  writer.close();
88
66
  socket.close();
@@ -98,11 +76,6 @@
98
76
  ```サーバ
99
77
  package minesweeper;
100
78
 
101
- //複数接続Socket通信サンプルプログラム(サーバー)
102
- //クライアントからの接続を待ち、接続が行なわれたら
103
- //1行のデータを受け取り、コンソールに表示して接続を切断する。
104
- //複数のクライアントとの通信をスレッドにより行なう。
105
- //プログラム終了は,コマンドプロンプトでCTRL-C
106
79
  import java.io.BufferedReader;
107
80
  import java.io.IOException;
108
81
  import java.io.InputStreamReader;
@@ -123,7 +96,7 @@
123
96
  try {
124
97
  // ポート番号は、5000
125
98
  //ソケットを作成
126
- serverSoc = new ServerSocket(5000);
99
+ serverSoc = new ServerSocket(5002);
127
100
  boolean flag=true;
128
101
 
129
102
  //クライアントからの接続を待機するaccept()メソッド。
@@ -208,6 +181,8 @@
208
181
  }//run end
209
182
  }//SrvWorkerThread end
210
183
 
184
+
185
+
211
186
  ```
212
187
 
213
188
  ```thread
@@ -219,13 +194,6 @@
219
194
 
220
195
  Result result;
221
196
 
222
- //Step1本クラスからインナーThreadクラスを5つ生成しそれぞれ一秒ごとに
223
- //1秒毎に1からnまでカウントするプログラムを作成させよ。
224
- //setThreadName(String tname,int n)でスレッド名とカウント秒数を与えるようにせよ。
225
- //Step2:ExThreadsMainTestにICallBackListenerインタフェースを実装して
226
- //ThreadからのCallBackによりどのスレッドがおわったかを本クラス内で表示させよ。
227
- //ThreadにsetCallBackListener(listener)を実装すること
228
-
229
197
  MineThread(){
230
198
  InnerThread minesweeper= new InnerThread((ICallBackListener)this);
231
199
  minesweeper.start();