【发布时间】:2017-04-06 19:26:52
【问题描述】:
我目前正在处理我的任务,我正在使用 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。有人知道如何解决这个问题吗?感谢您的帮助!
【问题讨论】:
-
也许服务器没有向您的套接字发送任何内容,并且它一直在等待?首先尝试发送一些东西,然后等待响应。您还可以定义接收超时。
-
服务器会检查哈希后的十六进制字符串是否正确,如果正确则发送另一个十六进制编码的字节字符串,并继续处理500次。如果错误,它将立即结束。当我在终端中使用 netcat 时它可以工作,但是当我使用套接字时它不工作..
-
我尝试在中间发送一些东西并遇到同样的问题
-
但是你没有发送,首先你尝试recv,我不知道你的服务器是如何配置的,但我想它只是等你发送一些东西才能recv。跨度>
-
如果你点击输出链接,服务器首先发送指令,然后我想解码十六进制编码的字节字符串,然后使用 md5 对其进行散列并以十六进制编码发送回散列格式
标签: python python-sockets