質問編集履歴

8

追記

2019/08/18 12:13

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -379,3 +379,39 @@
379
379
  sock.close
380
380
 
381
381
  ```
382
+
383
+
384
+
385
+ ```server
386
+
387
+
388
+
389
+ Wireless LAN adapter Wi-Fi:
390
+
391
+
392
+
393
+ 接続固有の DNS サフィックス . . . . .: tcn-catv.ne.jp
394
+
395
+ リンクローカル IPv6 アドレス. . . . .: fe80::3908:b55c:8d55:59f2%18
396
+
397
+ IPv4 アドレス . . . . . . . . . . . .: 192.168.11.9
398
+
399
+ サブネット マスク . . . . . . . . . .: 255.255.255.0
400
+
401
+ デフォルト ゲートウェイ . . . . . . .: 192.168.11.1
402
+
403
+
404
+
405
+ イーサネット アダプター Bluetooth ネットワーク接続:
406
+
407
+
408
+
409
+ メディアの状態. . . . . . . . . . . .: メディアは接続されていません
410
+
411
+ 接続固有の DNS サフィックス . . . . .:
412
+
413
+ EOF
414
+
415
+
416
+
417
+ ```

7

追記

2019/08/18 12:12

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -297,3 +297,85 @@
297
297
  breakしたところ次に処理が移ったので
298
298
 
299
299
  やはりwhileに問題があるのかと思われます。
300
+
301
+ ```server
302
+
303
+ #! ruby -Ku
304
+
305
+ require "kconv"
306
+
307
+ require 'socket'
308
+
309
+ require 'time'
310
+
311
+
312
+
313
+ gate = TCPServer.open("55555")
314
+
315
+ sock = gate.accept
316
+
317
+ gate.close
318
+
319
+
320
+
321
+ while cmd = sock.gets
322
+
323
+ until(cmd = sock.gets) == "\004"
324
+
325
+ puts(Kconv.tosjis(cmd))
326
+
327
+ end
328
+
329
+
330
+
331
+ while msg = STDIN.gets
332
+
333
+ sock.write(msg)
334
+
335
+ while cmd = sock.gets
336
+
337
+ puts(Kconv.tosjis(cmd))
338
+
339
+ end
340
+
341
+ end
342
+
343
+ sock.close
344
+
345
+
346
+
347
+ ```
348
+
349
+
350
+
351
+ ```client
352
+
353
+ #! ruby -Ku
354
+
355
+ require "kconv"
356
+
357
+ require 'socket'
358
+
359
+ #ipconfigを実行し結果を投げる
360
+
361
+ sock = TCPSocket.open("localhost","55555")
362
+
363
+
364
+
365
+ sock.write(`ipconfig`)
366
+
367
+ sock.puts("\004")
368
+
369
+ #受け取ったコマンドを実行する。
370
+
371
+ while cmd = sock.gets
372
+
373
+ sock.write(`#{cmd}`)
374
+
375
+
376
+
377
+ end
378
+
379
+ sock.close
380
+
381
+ ```

6

タイトル変更

2019/08/18 11:51

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
@@ -1 +1 @@
1
- Ruby socket コマンド実行結果をすべて受取ったらbreakさ
1
+ Ruby socket whileから抜
test CHANGED
File without changes

5

追記

2019/08/18 02:07

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -287,3 +287,13 @@
287
287
 
288
288
 
289
289
  どこに原因があるのでしょうか?・・・
290
+
291
+
292
+
293
+ **さらに追記**
294
+
295
+ whileに問題ないと書きましたが
296
+
297
+ breakしたところ次に処理が移ったので
298
+
299
+ やはりwhileに問題があるのかと思われます。

4

追記

2019/08/18 02:02

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -274,7 +274,9 @@
274
274
 
275
275
  はうまく作動している。
276
276
 
277
- ただ、ipconfigの結果を表示し終えたところでフリーズした
277
+ ただ、ipconfigの結果を表示し終えたところで文字入力を受け付けていると思いきや
278
+
279
+ 打っても反応がない。
278
280
 
279
281
  今回の質問内容の場所に問題があるのかと思ったのですが
280
282
 

3

追記

2019/08/17 14:43

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -262,7 +262,9 @@
262
262
 
263
263
  接続固有の DNS サフィックス . . . . .:
264
264
 
265
+ #!ipconfigを表示したら本来ここから文字を打てる(クライアントへ投げるコマンド)はずだが
266
+
265
- #!ここからフリーズ!
267
+ 打っても反応がない。!
266
268
 
267
269
  ```
268
270
 

2

追記

2019/08/17 14:41

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -218,15 +218,19 @@
218
218
 
219
219
  実行すると
220
220
 
221
+ #クライアントを実行
222
+
221
223
  ```client
222
224
 
223
- C:\Users\matsu\Desktop\ruby_lesson>ruby a.rb
225
+ C:\Users\matsu\Desktop\ruby_lesson>ruby client.rb
224
-
225
-
226
-
226
+
227
+
228
+
227
- ```
229
+ ```
230
+
231
+
232
+
228
-
233
+ #サーバーを実行。
229
-
230
234
 
231
235
  ```server
232
236
 

1

追記

2019/08/17 14:31

投稿

kazuyakazuya
kazuyakazuya

スコア193

test CHANGED
File without changes
test CHANGED
@@ -105,3 +105,177 @@
105
105
  なにか良い方法はないでしょうか?
106
106
 
107
107
  分からないので参考になるリンクまたは説明をお願いします。
108
+
109
+
110
+
111
+ **追記**
112
+
113
+
114
+
115
+ ```server
116
+
117
+ #! ruby -Ku
118
+
119
+ require "kconv"
120
+
121
+ require 'socket'
122
+
123
+
124
+
125
+ gate = TCPServer.open("55555")
126
+
127
+ sock = gate.accept
128
+
129
+ gate.close
130
+
131
+ while cmd = sock.gets
132
+
133
+ puts(Kconv.tosjis(cmd))#ここはipconfigを表示する処理。
134
+
135
+ end
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ #コマンドを相手へ投げる。
146
+
147
+ while msg = STDIN.gets
148
+
149
+ sock.write(msg)
150
+
151
+ while cmd = sock.gets#注意! ここはしっかり動作するかまだ立証していない
152
+
153
+ puts cmd #クライアントへ投げた文字列(実行したいコマンド)の結果をサーバー側で表示するための処理です。
154
+
155
+ end #注意! ここはしっかり動作するかまだ立証していない
156
+
157
+ end
158
+
159
+ sock.close
160
+
161
+
162
+
163
+ ```
164
+
165
+
166
+
167
+ ```client
168
+
169
+ #! ruby -Ku
170
+
171
+ require "kconv"
172
+
173
+ require 'socket'
174
+
175
+ #ipconfigを実行し結果を投げる
176
+
177
+ sock = TCPSocket.open("localhost","55555")
178
+
179
+ sock.write(`ipconfig`)
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ #受け取ったコマンドを実行する。
188
+
189
+ while cmd = sock.gets
190
+
191
+ sock.write(`#{cmd}`)#注意! ここはしっかり動作するかまだ立証していない 受け取ったコマンド結果をサーバー側へ返す処理。
192
+
193
+ end
194
+
195
+ sock.close
196
+
197
+
198
+
199
+ ```
200
+
201
+
202
+
203
+ 大変わかりずらいですが
204
+
205
+ 今回やっていること
206
+
207
+
208
+
209
+ 1 クラアントがサーバーへipconfigの結果を投げる
210
+
211
+ 2 サーバー側が受けと取り、結果を表示させたら
212
+
213
+ 今回はサーバー側からクライアントへコマンドを実行するための文字列を投げる。
214
+
215
+
216
+
217
+ **起こっていること**
218
+
219
+ 実行すると
220
+
221
+ ```client
222
+
223
+ C:\Users\matsu\Desktop\ruby_lesson>ruby a.rb
224
+
225
+
226
+
227
+ ```
228
+
229
+
230
+
231
+ ```server
232
+
233
+ ・・・
234
+
235
+ ・・・上記省略
236
+
237
+ Wireless LAN adapter Wi-Fi:
238
+
239
+
240
+
241
+ 接続固有の DNS サフィックス . . . . .: tcn-catv.ne.jp
242
+
243
+ リンクローカル IPv6 アドレス. . . . .: fe80::3908:b55c:8d55:59f2%18
244
+
245
+ IPv4 アドレス . . . . . . . . . . . .: 192.168.11.9
246
+
247
+ サブネット マスク . . . . . . . . . .: 255.255.255.0
248
+
249
+ デフォルト ゲートウェイ . . . . . . .: 192.168.11.1
250
+
251
+
252
+
253
+ イーサネット アダプター Bluetooth ネットワーク接続:
254
+
255
+
256
+
257
+ メディアの状態. . . . . . . . . . . .: メディアは接続されていません
258
+
259
+ 接続固有の DNS サフィックス . . . . .:
260
+
261
+ #!ここからフリーズ!
262
+
263
+ ```
264
+
265
+ 要約すると
266
+
267
+ ipconfigを実行したクライアントがサーバーへ投げるところまで
268
+
269
+ はうまく作動している。
270
+
271
+ ただ、ipconfigの結果を表示し終えたところでフリーズしたので
272
+
273
+ 今回の質問内容の場所に問題があるのかと思ったのですが
274
+
275
+ otnさんの指摘の通り
276
+
277
+ 今回のwhileに問題はありませんでした。
278
+
279
+
280
+
281
+ どこに原因があるのでしょうか?・・・