2016-11-11 15 views
0

私は単純なクライアントとサーバーをpythonで作成します。私のサーバーを作成するために私はポート転送を行います。しかし、私は、サーバがオンラインであるかオフラインであるかにかかわらず、私は解決することができないという問題を抱えています。私のソケットは私に成功のメッセージを与えます。この失敗はどこから来たのですか?私のソケットはサーバーをオフラインにしても常にサーバーに接続します

これは、クライアントでの私のコードです:

import socket 
from threading import Thread 

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    client_socket.connect(("89.139.105.181", 8350)) 
    print "Client connection success" 
except socket.error: 
    print "Client error" 


def send_to_server(): 
    msg = raw_input("Client:") 
    client_socket.send(msg) 


def recv_from_server(): 
    response_server = client_socket.recv(1024) 
    print response_server 


def main(): 
    while True: 
     send_thread = Thread(target=send_to_server,) 
     recv_thread = Thread(target=recv_from_server,) 

     send_thread.start() 
     recv_thread.start() 

     send_thread.join() 
     recv_thread.join() 

if __name__ == "__main__": 
    main() 
+0

ターゲットとするIPアドレスを確認することをお勧めします。それは単に起こることはできません。 – Shasha99

+0

ipはルータのIPであり、私は彼に接続するためにポートフォワーディングを行いますが、サーバがオフラインの場合にも動作します。 –

+0

OKです。したがって、要求を受信するとそれを転送する中間ノードです実際のターゲットにそしてあなたの実際の目標が死んでも成功のメッセージを得ています。私は正しいですか? – Shasha99

答えて

1

あなたが順番にあなたが同じネットワーク内のノードを対象とする要求の転送ソケットを使用して中間ノードに接続されているので、あなたの中間ノードの意志への接続ターゲットノードがダウンしていても正常に実行されます。

したがって、クライアントのclient_socket.connect()は、中間ノードからのターゲットノードへのソケット接続が成功したかどうか通知されないため、中間ノードに正常に接続されたため、常に成功します。

しかし、実際にターゲットノードに接続されているかどうかを確認する簡単なハックは、リクエストを送信した後に、指定された時間内に実際に期待される応答を受信して​​いるかどうかをチェックすることです。クライアントは、サーバーは何らかの応答を送信します)。

関連する問題