2016-05-14 165 views
0

用我的程序,我尝试使用socket.socket()连接到一个IP地址,当它连接捕获一些莫尔斯码时,解码它,然后用socket.sendall通过套接字推回答案()。我拥有它,所以我可以连接到IP地址,解码消息,甚至发回我的答案,但是当我发回答案时,它说这是错误的,尽管我知道事实并非如此。我想知道如果我回复我的回答,如果我发回一组额外的引号或其他东西?任何帮助,将不胜感激。为什么socket.sendall()不工作?

import socket 

def morse(code): 
    decoded = [] 
    CODE = [['.-', 'A'],['-...', 'B'],['-.-.', 'C'],['-..', 'D'],['.', 'E'],['..-.', 'F'],['--.', 'G'],['....', 'H'],['..', 'I'],['.---', 'J'],['-.-', 'K'],['.-..', 'L'],['--', 'M'],['-.', 'N'],['---', 'O'],['.--.', 'P'],['--.-', 'Q'],['.-.', 'R'],['...', 'S'],['-', 'T'],['..-', 'U'],['...-', 'V'],['.--', 'W'],['-..-', 'X'],['-.--', 'Y'],['--..', 'A']] 
    for i in CODE: 
     if i[0] == code: 
      decoded.append(i[1].lower()) 
     if code == '': 
      decoded.append('.') 
    return decoded 

def netcat(hostname, port, content): 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((hostname, port)) 
    while 1: 
     data = s.recv(1024) 
     if data == "": 
      break 
     if "text:" in repr(data): 
      s.sendall(content) 
     print("Received:", repr(data)) 
     if "-" in repr(data): 
      splitMorse = repr(data).split(' ') 
      splitMorse = splitMorse[8:len(splitMorse)-2] 
      decoded = [] 
      for i in splitMorse: 
       decoded.extend(morse(i)) 
      strDecoded = ''.join(decoded) 
      strDecoded = strDecoded.replace("....................................................", " ") 
      print("{}\n".format(strDecoded)) 
      #HERE IS WHERE I AM SENDING THE STRING BACK 
      print(s.sendall("{}\n".format(strDecoded))) 
    print("Connection closed.") 
    s.shutdown(socket.SHUT_WR) 
    s.close() 

content = "GET\n" 
netcat('146.148.102.236', 24069, content) 

在通过套接字发送我的字符串的结尾,我添加了一个“\ n”,因为否则它不会接受我的字符串,它会永远坐在那里(因为你必须按输入后进入这是我的输出:

('Received:', "'------------------------------------------\\nWelcome to 
The Neverending Crypto!\\nQuick, find Falkor and get through this!\\nThis 
is level 1, the Bookstore\\nRound 1. Give me some text:'") 


None 
('Received:', "'GET encrypted is --. . - \\nWhat is ..-. .-. .- --. -- . 
-. - .- - .. --- -. decrypted?\\n:'") 
fragmentation 

None 
('Received:', "'No... I am leaving.\\n'") 
Connection closed. 

回答

0

我觉得你的逻辑是有缺陷的第一条消息中包含text:,它也包含-我想你想elif您最终是否

为了您的序列。陈述在netcat(),试试这个:

if data == "": 
     break 
    print("Received:", repr(data)) 
    if "text:" in repr(data): 
     ... 
    elif "-" in repr(data): 
     ...