【问题标题】:Python could not receive from server after sending message over发送消息后Python无法从服务器接收
【发布时间】: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


【解决方案1】:

s.recv(bufferSize) 行仍在等待来自服务器的一些传入数据。但是,服务器只发送您所看到的内容。尝试使用您的 hexReply 变量回复服务器,看看会发生什么。只需在print 语句之后插入s.send(hexReply + "\r\n")

【讨论】:

  • 在我在 hexReply 后面添加 +"\r\n" 后就可以使用了!谢谢!
  • @Shaoz 如果您没有更多问题,请将您的问题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多