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

2024-04-29 20:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的程序中,我尝试使用插座.插座(),当它连接以捕获一个莫尔斯电码时,将其解码,然后用插座.sendall(). 我有它,所以我可以连接到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键)。以下是我的输出:

^{pr2}$

Tags: 答案indataifcodesocketcontent解码
1条回答
网友
1楼 · 发布于 2024-04-29 20:08:13

我认为你的逻辑有缺陷。第一条消息包含text:,它也包含-。我想你想要elif作为你最后的if。在

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

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

相关问题 更多 >