タイトルに書いた通り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)