我目前正在處理我的任務,並且正在使用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)鏈接:after killing the terminal。任何人有任何想法如何解決這個問題?感謝你的幫助!
也許服務器沒有發送任何東西給你的套接字,它會一直等到永遠?首先嚐試發送一些內容,然後等待響應。您也可以定義接收超時。 – Szabolcs
服務器將檢查散列的十六進制字符串是否正確,如果正確,它將發送另一個十六進制編碼的字節字符串,並且該過程繼續進行500次。如果錯誤,它將立即結束。它工作時,我在終端使用netcat,但它不工作時,我使用套接字.. – Shaoz
我試着發送一些東西在中間,並得到了同樣的問題 – Shaoz