2016-05-14 3 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) 

それ以外の場合は、私の文字列を受け付けませんし、あなたが入力した後Enterキーを押す必要があるため、それは(永遠にそこに座ってますので、私は「\ 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): 
     ... 
関連する問題