Pythonで「接続が拒否されました」というエラーが表示されるのはなぜですか?(ソケット)




socket.getfqdn() python (5)

仮定s = socket.socket()サーバーは、次の方法でバインドできます。方法1:

host = socket.gethostname()
s.bind((host, port))

方法2:

host = socket.gethostbyname("localhost")  #Note the extra letters "by"
s.bind((host, port))

方法3:

host = socket.gethostbyname("192.168.1.48")
s.bind((host, port))

クライアント側で同じメソッドを正確に使用しないと、エラーが発生しますsocket.error errno 111 connection refused.

したがって、サーバー側と同じように、クライアント側で全く同じメソッドを使用してホストを取得する必要があります。 たとえば、クライアントの場合は、次の方法を使用します。

方法1:

host = socket.gethostname() 
s.connect((host, port))

方法2:

host = socket.gethostbyname("localhost") # Get local machine name
s.connect((host, port))

方法3:

host = socket.gethostbyname("192.168.1.48") # Get local machine name
s.connect((host, port))

問題を解決することを願っています。

私はソケットの新人です、私の完全な理解の不足を許してください。

私はサーバースクリプト(server.py)を持っています:

#!/usr/bin/python

import socket #import the socket module

s = socket.socket() #Create a socket object
host = socket.gethostname() #Get the local machine name
port = 12397 # Reserve a port for your service
s.bind((host,port)) #Bind to the port

s.listen(5) #Wait for the client connection
while True:
    c,addr = s.accept() #Establish a connection with the client
    print "Got connection from", addr
    c.send("Thank you for connecting!")
    c.close()

クライアントスクリプト(client.py):

#!/usr/bin/python 

import socket #import socket module

s = socket.socket() #create a socket object
host = '192.168.1.94' #Host i.p
port = 12397 #Reserve a port for your service

s.connect((host,port))
print s.recv(1024)
s.close

デスクトップ端末に行き、次のように入力してスクリプトを開始します:

python server.py

その後、私は自分のラップトップ端末に行き、クライアントスクリプトを開始します:

python client.py

私は次のエラーが表示されます:

ファイル "client.py"、9行目

s.connect((host、port))

ファイル "/usr/lib/python2.7/socket.py"、224行目、meth

getattr(self._sock、name)を返す(* args)

socket.error:[Errno 111]接続が拒否されました

私は無駄に別のポート番号を使用してみました。 しかし、クライアントスクリプトで同じipとgethostname()メソッドを使用してホスト名を取得することができ、デスクトップ(サーバー)に対してpingを実行できます。


ターミナルでこのコマンドを試してください:

sudo ufw enable
ufw allow 12397

host = socket.gethostname()  # Get the local machine name
port = 12397                 # Reserve a port for your service
s.bind((host,port))          # Bind to the port

私はこのエラーがDNS解決に関連していると思います。 この文のhost = socket.gethostname()はホスト名を取得しますが、オペレーティング・システムがホスト名をローカル・アドレスに解決できない場合は、エラーが発生します。 Linuxオペレーティングシステムでは、 /etc/hostsファイルを変更して1行追加することができます。 以下のようになります( 'hostname'はsocket.gethostname()が取得したものです)。

127.0.0.1   hostname

このエラーは、何らかの理由でクライアントがサーバースクリプトを実行しているコンピュータのポートに接続できないことを意味します。 これは、宛先へのルーティングの欠如のようないくつかの事柄によって引き起こされる可能性がありますが、サーバーにpingを実行できるので、そうではありません。 もう1つの理由は、クライアントとサーバーの間のどこかにファイアウォールがある可能性があります。サーバー自体またはクライアント上にある可能性があります。 あなたのネットワークアドレッシングを考えると、私はサーバとクライアントの両方が同じLAN上にあると仮定しているので、トラフィックをブロックする可能性のあるルータは存在してはいけません。 この場合、私は次のことを試してみましょう:

  • そのポートが実際にサーバーでリッスンしているかどうかを確認してください(これはコードがあなたが考えるべきことをしているかどうかを示すはずです):あなたのOSに基づいていますが、Linuxではnetstat -ntulp
  • サーバーへの接続を受け入れるかどうかをサーバーから確認します。OSに基づいていますが、 telnet LISTENING_IP LISTENING_PORTがそのジョブを実行する必要があります
  • クライアントからサーバーのポートにアクセスできるかどうかを確認します。ただし、コードを使用しないでください。クライアントからのtelnet(または使用するOSに適したコマンド)だけです。

その結果をお知らせください。


host = socket.gethostname() host ='192.168.1.94'代わりにserver.pyファイルのmake: host ='192.168.1.94'





sockets