私は現在私の課題に取り組んでおり、私はターミナル経由で接続するためにpythonソケットを使用しています。しかし、私は私のメッセージをサーバに送って返信を受け取った後、何かがハングするという問題に遭遇しました。私のコードは次の通りです:メッセージを送信した後にPythonがサーバーから受信できませんでした
import socket
import sys
import md5
import re
hostname = "cs2107.spro.ink"
ip = socket.gethostbyname(hostname)
port = 9000
server_address = (ip, port)
bufferSize = 1024
# Socket connection
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print >>sys.stderr, 'connecting to %s port %s' % server_address
s.connect((ip, port))
try:
while True:
data = s.recv(bufferSize)
if not data:
break
print data
regex = re.compile(r'\n([0-9a-fA-F]+)(?:\n)', re.I | re.S | re.M)
checkHex = re.findall(regex, data)
if len(checkHex) != 0:
receiveHex = str(checkHex).strip("['']")
decode = receiveHex.decode()
m = md5.new()
m.update(decode)
hexReply = m.hexdigest()
s.sendall(hexReply.encode())
print hexReply
finally:
print >>sys.stderr, 'closing socket.....'
s.close()
出力はoutputのように表示されます。私はそれを殺すと、最近の呼び出しは `data = s.recv(bufferSize)link:after killing the terminalです。誰もこれを解決する方法を考えている?あなたの助けに感謝!
おそらく、サーバーはあなたのソケットに何も送信しないで、永遠に待っていますか?まず何かを送ってから応答を待ちます。受信のタイムアウトを定義することもできます。 – Szabolcs
サーバーはハッシュされた16進文字列が正しいかどうかをチェックし、正しい場合は別の16進コード化バイト文字列を送信し、プロセスは500回実行されます。間違っていると、すぐに終了します。それは私が端末でnetcatを使用すると動作しますが、何とか私はソケットを使用すると動作しません。 – Shaoz
私は途中で何かを送ろうとしましたが、同じ問題があります – Shaoz