2011-06-27 41 views
4

私はソケットについて読んでいました。試してみるとよいでしょう:入力をエコーする簡単なチャットサーバ。これは一般的な練習問題であり、chatserver5.pySOなどの質問がいくつか見つかりました。問題は私がtelnet localhost 51234を使用していて、telnet 192.168.1.3 51234(192.168.1.3が私の "サーバー"のネットワークIPである)を使用しないと接続できないということです。言うまでもありませんが、ネットワーク上の別のマシンから接続することはできません。Pythonのシンプルなtelnetチャットサーバ

Trying 192.168.1.3... 
telnet: connect to address 192.168.1.3: Connection refused 
telnet: Unable to connect to remote host 

はここに私のコードです:

import socket, threading 

HOST = '127.0.0.1' 
PORT = 51234 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT)) 
s.listen(4) 
clients = [] #list of clients connected 
lock = threading.Lock() 


class chatServer(threading.Thread): 
    def __init__(self, (socket,address)): 
     threading.Thread.__init__(self) 
     self.socket = socket 
     self.address= address 

    def run(self): 
     lock.acquire() 
     clients.append(self) 
     lock.release() 
     print '%s:%s connected.' % self.address 
     while True: 
      data = self.socket.recv(1024) 
      if not data: 
       break 
      for c in clients: 
       c.socket.send(data) 
     self.socket.close() 
     print '%s:%s disconnected.' % self.address 
     lock.acquire() 
     clients.remove(self) 
     lock.release() 

while True: # wait for socket to connect 
    # send socket to chatserver and start monitoring 
    chatServer(s.accept()).start() 

私はtelnetやソケットとの経験がない私は、次のような出力が得られます。なぜ私は遠隔で接続できないのですか?どうすれば解決できますか?

+1

ファイアウォールはありますか? –

答えて

5

HOST = ''に設定すると、どこからでも接続できます。今は127.0.0.1にバインドしています。これはlocalhostと同じです。

+0

これは簡単でした。 TelnetはどのOSでも同じでなければなりません。だからクライアントプログラムの必要はありません。誰でもtelnetで入力できますか? – styfle

+0

はい、任意のOSからtelnetでこのサーバをテストできます。 – Ravi

+0

私はTelnetがリモートログインに使用されていると思うので、私のマシンでこれを実行するセキュリティ上のリスクはありますか? – styfle

1

HOST = '127.0.0.1'HOST = '192.168.1.3'またはHOST = ''に置き換えます。これにより、あなたの内部のローカルホストではなく、あなたの派遣先IPにバインドされます

関連する問題