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

質問編集履歴

8

追記

2019/08/18 12:13

投稿

kazuyakazuya
kazuyakazuya

スコア193

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

追記

2019/08/18 12:12

投稿

kazuyakazuya
kazuyakazuya

スコア193

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

タイトル変更

2019/08/18 11:51

投稿

kazuyakazuya
kazuyakazuya

スコア193

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

5

追記

2019/08/18 02:07

投稿

kazuyakazuya
kazuyakazuya

スコア193

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

追記

2019/08/18 02:02

投稿

kazuyakazuya
kazuyakazuya

スコア193

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

追記

2019/08/17 14:43

投稿

kazuyakazuya
kazuyakazuya

スコア193

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

追記

2019/08/17 14:41

投稿

kazuyakazuya
kazuyakazuya

スコア193

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 a.rb
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

追記

2019/08/17 14:31

投稿

kazuyakazuya
kazuyakazuya

スコア193

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
+ どこに原因があるのでしょうか?・・・