<jupyter_start><jupyter_text>JSON 소켓 통신 with Android소켓통신을 해보았고 다음과 같은 이슈가 있었습니다. Reading MessagesJSON bytes stream을 받을 때, 실시간으로 고용량을 보내기 때문에 들어오는 크기가 제각각 이였습니다.  따라서 JSON 마지막 구분자 `}`가 들어올 때 까지 무작정 받기로 했습니다.(대신 string concat 메모리 비효율 문제가 있음)  Message re-encoding issue메세지를 다시 base64로 인코딩을 할때, numpy array에서 base64모듈을 사용해 인코딩을 하는데  크기가 5배 가까이 증가하는 현상을 보임, 이후 해결해야할 과제로 보이나,일단 안드로이드가 받은 메세지를 이미지로 번역하는 과정을 기다려야함.  서버열고 안드로이드에서 받음<jupyter_code>import json
import socket
import base64
import io
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import cv2
import PIL
PORT = 12321
HOST = '192.168.0.2'
BACKLOG = 10

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(BACKLOG)
conn, addr = s.accept()
conn, addr
all_msg = ""
PACKET_LEN = 1024 ** 2
while all_msg[-1:] != "}":
    while True:
        temp = conn.recv(PACKET_LEN)
        print(len(temp))
        all_msg += temp.decode('utf-8')
        if len(temp) < PACKET_LEN:
            break
        
len(all_msg), type(all_msg), all_msg
conn.close()
s.close()
len(all_msg)
split_msg = all_msg.split('"')

for i, msg in enumerate(split_msg):
    print(i, len(msg))
base_code = "".join(split_msg[11:-1])
len(base_code)
base64_decode = base64.b64decode(base_code)
len(base64_decode)
type(base64_decode)
base64_decode[:10]
bytes_image = io.BytesIO(base64_decode)
img = mpimg.imread(bytes_image, format="JPG")
type(img)
img.shape
len(img.base)
img.base[:1000]
plt.imshow(img)
plt.show()
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imwrite("./test_file.jpg", img)<jupyter_output><empty_output><jupyter_text>서버 열고 안드로이드로 전송<jupyter_code>s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(BACKLOG)
conn, addr = s.accept()
conn, addr
encoded_string = None
with open("./test_file.jpg", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())
len(encoded_string)
type(encoded_string)
send_msg_dict = {
    "TiredScore": 0.98,
    "image": str(encoded_string)
}
json_msg = json.dumps(send_msg_dict)
type(json_msg), len(json_msg)
conn.sendall(json_msg.encode('utf-8'))
conn.close()
s.close()<jupyter_output><empty_output><jupyter_text>Encoded image test<jupyter_code>with open("encoded_text.txt", "w") as f:
    f.write(str(encoded_string))
str_encoded = str(encoded_string)
type(encoded_string), type(str_encoded)
str_encoded[:100]
for i, d in enumerate(str_encoded.split("'")):
    print(i, len(d))
str_encoded.split("'")[1][:10], str_encoded.split("'")[1][-10:]
test_base = base64.b64decode(str_encoded.split("'")[1])
type(test_base)
bytes_image = io.BytesIO(test_base)
img = mpimg.imread(bytes_image, format="JPG")
img.shape
plt.imshow(img)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13994169096209913, 'fraction_numerical': 0.02879008746355685, 'mean_word_length': 5.428571428571429, 'pattern_counts': {'":': 3, '<': 14, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '644526', 'license': 'MIT', 'n_tokens_mistral': 1293, 'n_tokens_neox': 1370, 'n_words': 238, 'path': 'test/socket_json/json_socket_with_android.ipynb', 'repo_name': 'minkukjo/TiredFace-Server', 'size': '2744'}