Closed nissymori closed 3 years ago
サーバーからの入力 {"type": "hello", "protocol": "mjsonp", "protocol_version": 3} がclient側に伝わっている。
clientからのデータを受け取ることができていない。
rubyのクライアント側でデータを送ってから,メッセージを出力するように変更したところメッセージは出力されたので 少なくとも発信はしている ![Uploading スクリーンショット 2021-03-02 15.01.18.png…]()
socket.each_lineの前に送るとサーバー側にうまく送れた。
each_lineでどういうことが起こっているのか調査
import socket
import json
import threading
init_message = {
"type": "hello",
"protocol": "mjsonp",
"protocol_version": 5,
}
"""
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # このサーバーでとりあえずjsonをmjaiのagentに送れている TODO mjaiのclientからの入力を確認する。
s.bind(('127.0.0.1', 11600))
s.listen(1)
conn, addr = s.accept()
msg = json.dumps(init_message)
conn.send(bytes(msg, encoding="utf-8"))
data = conn.recv(1024).decode(encoding="uft-8")
if data:
print(data)
else:
print("fail")
conn.close()
"""
def accept_loop(soc):
while True:
try:
acc, addr = soc.accept()
hbuf, sbuf = socket.getnameinfo(addr, socket.NI_NUMERICHOST | socket.NI_NUMERICSERV)
print("accept:{}:{}".format(hbuf, sbuf))
t = threading.Thread(target=send_recv, args=[acc])
t.start()
except RuntimeError as e:
print("thread:{}".format(e))
def send_recv(acc):
buf_size = 512
id = threading.get_ident()
try:
msg = json.dumps(init_message)
print(type(msg))
acc.send(bytes(msg, encoding="utf-8"))
print("okureta")
except:
print("okuretenai")
while True:
try:
data = acc.recv(1024)
print(data)
except InterruptedError as e:
print("recv:{}".format(e))
break
acc.close()
if __name__ == "__main__":
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.bind(('127.0.0.1', 11600))
soc.listen(1)
accept_loop(soc)
サーバーからメッセージを送った時逐次的にクライアントが対応することができていない。
サーバーを落とした時に初めてクライアント側で処理が実行されている。(このことの原因がわかればうまくいきそう)
clientとserverのアドレスファミリとプロトコルファミリを合わせてみたがどちら側のものに合わせてもうまくいかなかった。
結果
書類/mjx-translator_python_preserve に保存している