質問編集履歴
1
ソースコードの変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,43 +16,35 @@
|
|
16
16
|
import java.net.Socket;
|
17
17
|
|
18
18
|
class
|
19
|
-
|
19
|
+
MineSweeperClient
|
20
20
|
{
|
21
21
|
public static void main(String[] args)
|
22
22
|
{
|
23
|
-
|
24
|
-
new
|
23
|
+
new MineSweeperClient();
|
25
24
|
}
|
26
25
|
|
27
|
-
|
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,
|
33
|
+
doClientJob(hostname,result);
|
32
34
|
}
|
33
35
|
|
34
|
-
public void doClientJob(String hostname,
|
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,
|
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(
|
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();
|