2017-04-06 91 views
0

我目前正在处理我的任务,并且正在使用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。任何人有任何想法如何解决这个问题?感谢你的帮助!

+0

也许服务器没有发送任何东西给你的套接字,它会一直等到永远?首先尝试发送一些内容,然后等待响应。您也可以定义接收超时。 – Szabolcs

+0

服务器将检查散列的十六进制字符串是否正确,如果正确,它将发送另一个十六进制编码的字节字符串,并且该过程继续进行500次。如果错误,它将立即结束。它工作时,我在终端使用netcat,但它不工作时,我使用套接字.. – Shaoz

+0

我试着发送一些东西在中间,并得到了同样的问题 – Shaoz

回答

0

s.recv(bufferSize)仍在等待来自服务器的一些传入数据。然而,服务器发送的只不过是你所看到的。尝试用你的hexReply变量回复服务器,看看会发生什么。只需在print声明后插入s.send(hexReply + "\r\n")即可。

+0

它在hexReply背后加上“\ r \ n”后就可以使用!谢谢! – Shaoz

+0

@Shaoz如果您没有其他问题,请将您的问题标记为已解决。 –

相关问题