为什么socket.sendall()不起作用?

时间:2016-05-14 19:26:02

标签: python sockets networking

使用我的程序,我试图使用socket.socket()连接到一个IP地址,当它连接到捕获一些莫尔斯代码时,解码它,然后通过带套接字的套接字推回答案。全部发送()。我有它所以我可以连接到IP地址,解码消息,甚至发回我的答案,但当我发回答案时,它说它是错的,即使我知道事实并非如此。我想知道是否可能,当我发回我的答案时,如果我在它周围发回一套额外的引号或什么?任何帮助将不胜感激。

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”,因为否则它将不会接受我的字符串并且它将永远坐在那里(因为你必须在输入后按Enter键。这是我的输出:

('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.

1 个答案:

答案 0 :(得分:0)

我认为你的逻辑存在缺陷。第一封邮件包含text:,其中还包含-。我想你想要elif作为你的决赛。

对于if中的netcat()语句序列,请尝试以下操作:

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