socket通信でpythonからkotlinへ画像を送ろうとしても不完全な状態になる
タイトルに書いた通りpythonで画像をバイナリで変換しkotlinで受信しようとしてもバイナリデータが途中ですべて0になり不完全な状態で画像が受信されてしまいます。
画像のサイズが349,325バイトに対してkotlinでログを確認したところ2804バイトしか受信していませんでした。
最近プログラミングを始めたもんでコードが冗長ですがご了承ください。
kotlin側
val socket: Socket?
val out: BufferedOutputStream?
try {
//ソケットの作成
socket = Socket(IP_ADDR, PORT)
out = BufferedOutputStream(socket.getOutputStream())
val inps = socket.getInputStream()
val bufferedReader = BufferedInputStream(inps)
val dis = DataInputStream(inps)
//パイソンから送られてくる画像のサイズを受信
val buf = ByteArray(6)
dis.read(buf)
val reqData = String(buf, Charset.forName("UTF-8"))
//画像サイズのバイト配列を作成
val buffer = ByteArray(reqData)
var read: Int
//画像データを受信しbufferへ入れる
do {
read = dis.read(buffer)
if (read != -1) {
break
}
} while (true)
out?.close()
socket?.close()
Python側
import socket
import numpy as np
import time
from PIL import Image
import io
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#ソケットオブジェクト作成
s.bind(("IPアドレス", ポート番号)) # サーバーのipと使用するポート
print("接続待機中")
while(True):
s.listen(1) # 接続要求を待機
soc, addr = s.accept() # 要求が来るまでブロック
print(str(addr)+"と接続完了")
binary = len(f.read())
filesize = '%s' % binary
soc.sendall(filesize.encode(encoding='utf-8')) #クライアントへの返信
image_pil = Image.open(image_path)
output = io.BytesIO()
image_pil.save(output, format='JPEG')
image_jpg = output.getvalue()
soc.sendall(image_jpg)