質問編集履歴

3

間違えを修正

2020/04/06 05:47

投稿

xsteviax
xsteviax

スコア14

test CHANGED
File without changes
test CHANGED
@@ -220,7 +220,7 @@
220
220
 
221
221
  binary = out.getvalue()
222
222
 
223
- connection.send(data)
223
+ connection.send(binary)
224
224
 
225
225
  finally:
226
226
 

2

内容を追加

2020/04/06 05:47

投稿

xsteviax
xsteviax

スコア14

test CHANGED
File without changes
test CHANGED
@@ -105,3 +105,125 @@
105
105
  connection.close()
106
106
 
107
107
  ```
108
+
109
+ ### 試したこと(追記)
110
+
111
+ np.saveとnp.loadを用いコードを書き直しし、互いに通信しようとしたところ、
112
+
113
+ サーバ側のnp.loadでデシリアライズできませんでした。
114
+
115
+
116
+
117
+ - サーバー側19行目「print(data2)」のブレークポイントでデバッグ
118
+
119
+ ```debug
120
+
121
+ data2
122
+
123
+ array(<function save at 0x7fd590150f28>, dtype=object)
124
+
125
+ ```
126
+
127
+ #### 以下、修正コード
128
+
129
+ - クライアント側
130
+
131
+
132
+
133
+ ```python
134
+
135
+ from io import BytesIO
136
+
137
+
138
+
139
+ import socket
140
+
141
+ import numpy as np
142
+
143
+
144
+
145
+ PORT = 11113
146
+
147
+ BUFFER_SIZE = 2048
148
+
149
+ out = BytesIO()
150
+
151
+
152
+
153
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
154
+
155
+ s.connect(('server_container', PORT))
156
+
157
+ data = np.arange(30)
158
+
159
+ data = np.reshape(data,(5,6))
160
+
161
+ print(data)
162
+
163
+ np.save(out, np.save)
164
+
165
+ binary = out.getvalue()
166
+
167
+ s.send(binary)
168
+
169
+ data2 = s.recv(BUFFER_SIZE)
170
+
171
+ data2 = np.load(BytesIO(data2), allow_pickle=True)
172
+
173
+ print(data2)
174
+
175
+ ```
176
+
177
+ - サーバー側
178
+
179
+ ```python
180
+
181
+ from io import BytesIO
182
+
183
+
184
+
185
+ import socket
186
+
187
+ import numpy as np
188
+
189
+
190
+
191
+ PORT = 11113
192
+
193
+ BUFFER_SIZE = 2048
194
+
195
+ out = BytesIO()
196
+
197
+
198
+
199
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
200
+
201
+ s.bind(('0.0.0.0', PORT))
202
+
203
+ s.listen()
204
+
205
+ while True:
206
+
207
+ (connection, client) = s.accept()
208
+
209
+ try:
210
+
211
+ print('Client connected', client)
212
+
213
+ data = connection.recv(BUFFER_SIZE)
214
+
215
+ data2 = np.load(BytesIO(data), allow_pickle=True)
216
+
217
+ print(data2)
218
+
219
+ np.save(out, data2)
220
+
221
+ binary = out.getvalue()
222
+
223
+ connection.send(data)
224
+
225
+ finally:
226
+
227
+ connection.close()
228
+
229
+ ```

1

内容の修正

2020/04/06 05:43

投稿

xsteviax
xsteviax

スコア14

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- - 以下に示すようにクライアント側とサーバ側それぞれにサイズやデータ型を予め設定したり、サイズやデータ型を改めてサーバー側通信することで実装できますが、このような暫定的な方法ではなく、2Dのnumpy配列を転送する推奨された方法はありますか?
9
+ - 以下に示すようにクライアント側とサーバ側それぞれにサイズやデータ型を予め設定したり、サイズやデータ型を改めてクライアント側からサーバー側通信することで実装できますが、このような暫定的な方法ではなく、2Dのnumpy配列を転送する推奨された方法はありますか?
10
10
 
11
11
 
12
12