質問編集履歴
8
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -188,4 +188,22 @@
|
|
188
188
|
|
189
189
|
end
|
190
190
|
sock.close
|
191
|
+
```
|
192
|
+
|
193
|
+
```server
|
194
|
+
|
195
|
+
Wireless LAN adapter Wi-Fi:
|
196
|
+
|
197
|
+
接続固有の DNS サフィックス . . . . .: tcn-catv.ne.jp
|
198
|
+
リンクローカル IPv6 アドレス. . . . .: fe80::3908:b55c:8d55:59f2%18
|
199
|
+
IPv4 アドレス . . . . . . . . . . . .: 192.168.11.9
|
200
|
+
サブネット マスク . . . . . . . . . .: 255.255.255.0
|
201
|
+
デフォルト ゲートウェイ . . . . . . .: 192.168.11.1
|
202
|
+
|
203
|
+
イーサネット アダプター Bluetooth ネットワーク接続:
|
204
|
+
|
205
|
+
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
|
206
|
+
接続固有の DNS サフィックス . . . . .:
|
207
|
+
EOF
|
208
|
+
|
191
209
|
```
|
7
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -147,4 +147,45 @@
|
|
147
147
|
**さらに追記**
|
148
148
|
whileに問題ないと書きましたが
|
149
149
|
breakしたところ次に処理が移ったので
|
150
|
-
やはりwhileに問題があるのかと思われます。
|
150
|
+
やはりwhileに問題があるのかと思われます。
|
151
|
+
```server
|
152
|
+
#! ruby -Ku
|
153
|
+
require "kconv"
|
154
|
+
require 'socket'
|
155
|
+
require 'time'
|
156
|
+
|
157
|
+
gate = TCPServer.open("55555")
|
158
|
+
sock = gate.accept
|
159
|
+
gate.close
|
160
|
+
|
161
|
+
while cmd = sock.gets
|
162
|
+
until(cmd = sock.gets) == "\004"
|
163
|
+
puts(Kconv.tosjis(cmd))
|
164
|
+
end
|
165
|
+
|
166
|
+
while msg = STDIN.gets
|
167
|
+
sock.write(msg)
|
168
|
+
while cmd = sock.gets
|
169
|
+
puts(Kconv.tosjis(cmd))
|
170
|
+
end
|
171
|
+
end
|
172
|
+
sock.close
|
173
|
+
|
174
|
+
```
|
175
|
+
|
176
|
+
```client
|
177
|
+
#! ruby -Ku
|
178
|
+
require "kconv"
|
179
|
+
require 'socket'
|
180
|
+
#ipconfigを実行し結果を投げる
|
181
|
+
sock = TCPSocket.open("localhost","55555")
|
182
|
+
|
183
|
+
sock.write(`ipconfig`)
|
184
|
+
sock.puts("\004")
|
185
|
+
#受け取ったコマンドを実行する。
|
186
|
+
while cmd = sock.gets
|
187
|
+
sock.write(`#{cmd}`)
|
188
|
+
|
189
|
+
end
|
190
|
+
sock.close
|
191
|
+
```
|
6
タイトル変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Ruby socket
|
1
|
+
Ruby socket whileから抜け出せない
|
body
CHANGED
File without changes
|
5
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -142,4 +142,9 @@
|
|
142
142
|
otnさんの指摘の通り
|
143
143
|
今回のwhileに問題はありませんでした。
|
144
144
|
|
145
|
-
どこに原因があるのでしょうか?・・・
|
145
|
+
どこに原因があるのでしょうか?・・・
|
146
|
+
|
147
|
+
**さらに追記**
|
148
|
+
whileに問題ないと書きましたが
|
149
|
+
breakしたところ次に処理が移ったので
|
150
|
+
やはりwhileに問題があるのかと思われます。
|
4
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -136,7 +136,8 @@
|
|
136
136
|
要約すると
|
137
137
|
ipconfigを実行したクライアントがサーバーへ投げるところまで
|
138
138
|
はうまく作動している。
|
139
|
-
ただ、ipconfigの結果を表示し終えたところで
|
139
|
+
ただ、ipconfigの結果を表示し終えたところで文字の入力を受け付けていると思いきや
|
140
|
+
打っても反応がない。
|
140
141
|
今回の質問内容の場所に問題があるのかと思ったのですが
|
141
142
|
otnさんの指摘の通り
|
142
143
|
今回のwhileに問題はありませんでした。
|
3
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -130,7 +130,8 @@
|
|
130
130
|
|
131
131
|
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
|
132
132
|
接続固有の DNS サフィックス . . . . .:
|
133
|
+
#!ipconfigを表示したら本来ここから文字を打てる(クライアントへ投げるコマンド)はずだが
|
133
|
-
|
134
|
+
打っても反応がない。!
|
134
135
|
```
|
135
136
|
要約すると
|
136
137
|
ipconfigを実行したクライアントがサーバーへ投げるところまで
|
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -108,11 +108,13 @@
|
|
108
108
|
|
109
109
|
**起こっていること**
|
110
110
|
実行すると
|
111
|
+
#クライアントを実行
|
111
112
|
```client
|
112
|
-
C:\Users\matsu\Desktop\ruby_lesson>ruby
|
113
|
+
C:\Users\matsu\Desktop\ruby_lesson>ruby client.rb
|
113
114
|
|
114
115
|
```
|
115
116
|
|
117
|
+
#サーバーを実行。
|
116
118
|
```server
|
117
119
|
・・・
|
118
120
|
・・・上記省略
|
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -51,4 +51,91 @@
|
|
51
51
|
すべて受け取り切ったら終了させたいのですが
|
52
52
|
その方法が全く思いつきません。
|
53
53
|
なにか良い方法はないでしょうか?
|
54
|
-
分からないので参考になるリンクまたは説明をお願いします。
|
54
|
+
分からないので参考になるリンクまたは説明をお願いします。
|
55
|
+
|
56
|
+
**追記**
|
57
|
+
|
58
|
+
```server
|
59
|
+
#! ruby -Ku
|
60
|
+
require "kconv"
|
61
|
+
require 'socket'
|
62
|
+
|
63
|
+
gate = TCPServer.open("55555")
|
64
|
+
sock = gate.accept
|
65
|
+
gate.close
|
66
|
+
while cmd = sock.gets
|
67
|
+
puts(Kconv.tosjis(cmd))#ここはipconfigを表示する処理。
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
#コマンドを相手へ投げる。
|
74
|
+
while msg = STDIN.gets
|
75
|
+
sock.write(msg)
|
76
|
+
while cmd = sock.gets#注意! ここはしっかり動作するかまだ立証していない
|
77
|
+
puts cmd #クライアントへ投げた文字列(実行したいコマンド)の結果をサーバー側で表示するための処理です。
|
78
|
+
end #注意! ここはしっかり動作するかまだ立証していない
|
79
|
+
end
|
80
|
+
sock.close
|
81
|
+
|
82
|
+
```
|
83
|
+
|
84
|
+
```client
|
85
|
+
#! ruby -Ku
|
86
|
+
require "kconv"
|
87
|
+
require 'socket'
|
88
|
+
#ipconfigを実行し結果を投げる
|
89
|
+
sock = TCPSocket.open("localhost","55555")
|
90
|
+
sock.write(`ipconfig`)
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
#受け取ったコマンドを実行する。
|
95
|
+
while cmd = sock.gets
|
96
|
+
sock.write(`#{cmd}`)#注意! ここはしっかり動作するかまだ立証していない 受け取ったコマンド結果をサーバー側へ返す処理。
|
97
|
+
end
|
98
|
+
sock.close
|
99
|
+
|
100
|
+
```
|
101
|
+
|
102
|
+
大変わかりずらいですが
|
103
|
+
今回やっていること
|
104
|
+
|
105
|
+
1 クラアントがサーバーへipconfigの結果を投げる
|
106
|
+
2 サーバー側が受けと取り、結果を表示させたら
|
107
|
+
今回はサーバー側からクライアントへコマンドを実行するための文字列を投げる。
|
108
|
+
|
109
|
+
**起こっていること**
|
110
|
+
実行すると
|
111
|
+
```client
|
112
|
+
C:\Users\matsu\Desktop\ruby_lesson>ruby a.rb
|
113
|
+
|
114
|
+
```
|
115
|
+
|
116
|
+
```server
|
117
|
+
・・・
|
118
|
+
・・・上記省略
|
119
|
+
Wireless LAN adapter Wi-Fi:
|
120
|
+
|
121
|
+
接続固有の DNS サフィックス . . . . .: tcn-catv.ne.jp
|
122
|
+
リンクローカル IPv6 アドレス. . . . .: fe80::3908:b55c:8d55:59f2%18
|
123
|
+
IPv4 アドレス . . . . . . . . . . . .: 192.168.11.9
|
124
|
+
サブネット マスク . . . . . . . . . .: 255.255.255.0
|
125
|
+
デフォルト ゲートウェイ . . . . . . .: 192.168.11.1
|
126
|
+
|
127
|
+
イーサネット アダプター Bluetooth ネットワーク接続:
|
128
|
+
|
129
|
+
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
|
130
|
+
接続固有の DNS サフィックス . . . . .:
|
131
|
+
#!ここからフリーズ!
|
132
|
+
```
|
133
|
+
要約すると
|
134
|
+
ipconfigを実行したクライアントがサーバーへ投げるところまで
|
135
|
+
はうまく作動している。
|
136
|
+
ただ、ipconfigの結果を表示し終えたところでフリーズしたので
|
137
|
+
今回の質問内容の場所に問題があるのかと思ったのですが
|
138
|
+
otnさんの指摘の通り
|
139
|
+
今回のwhileに問題はありませんでした。
|
140
|
+
|
141
|
+
どこに原因があるのでしょうか?・・・
|