サーバーソフトウェアは、errno99: cannot assign requested address
以外のIPアドレスをバインドに使用しているときに127.0.0.1
と表示します。
ただし、IPアドレスが127.0.0.1
の場合は機能します。名前空間に関連していますか?
execfile()
を呼び出して、別のpythonプログラムでサーバーとクライアントのコードを実行しています。実際にミニネットのソースコードを編集しています。net.pyを編集し、その中でexecfile( 'server.py')execfile( 'client1.py')とexecfile( 'client2.py')を使用しました。 Sudo mn --topo single、3 "は、サーバーとクライアントコードが実行される3つのホストの作成とともに呼び出されます。サーバーとクライアントのコードを以下に示します。
#server code
import select
import socket
import sys
backlog = 5
size = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("10.0.0.1",9999))
server.listen(backlog)
input = [server]
running = 1
while running:
inputready,outputready,exceptready = select.select(input,[],[])
for s in inputready:
if s == server:
client, address = server.accept()
input.append(client)
else:
l = s.recv(1024)
sys.stdout.write(l)
server.close()
#client code
import socket
import select
import sys
import time
while(1) :
s,addr=server1.accept()
data=int(s.recv(4))
s = socket.socket()
s.connect(("10.0.0.1",9999))
while (1):
f=open ("hello1.txt", "rb")
l = f.read(1024)
s.send(l)
l = f.read(1024)
time.sleep(5)
s.close()
物事を基本に落とし込んで、これはあなたがテストしたいものです:
import socket
server = socket.socket()
server.bind(("10.0.0.1", 6677))
server.listen(4)
client_socket, client_address = server.accept()
print(client_address, "has connected")
while 1==1:
recvieved_data = client_socket.recv(1024)
print(recvieved_data)
これは、いくつかのことを前提として機能します。
以下を試して、スタートメニューを開き、「検索」フィールドにcmd
と入力してEnterキーを押します。黒いコンソールが開いたら、ping www.google.com
と入力すると、GoogleのIPアドレスが表示されます。このアドレスはグーグルのローカルIPであり、それらはそれにバインドし、明らかにグーグルが所有するIPアドレスにnotバインドできます。
それを念頭に置いて、独自のIPアドレスのセットを所有します。最初にサーバーのローカルIPを取得しますが、次に自宅のローカルIPを取得します。以下の図の192.168.1.50
は、バインドできるサーバーのローカルIPです。まだ83.55.102.40
を所有していますが、問題はサーバーではなくルーターが所有していることです。 http://whatsmyip.com にアクセスしても、あなたのIPは83.55.102.40
であることがわかります。これは、あなたがどこから来たのかしか見ることができないため、そうではありません。ルーターからインターネットにアクセスしています。
友達があなたのサーバー(192.168.1.50
にバインドされている)にアクセスするには、ポート6677
を192.168.1.50
に転送する必要があります。これはルーターで行われます。背後にいると仮定します。
学校にいる場合は、他のジレンマとルーターがあります。
このようにしてみてください:server.bind(( "0.0.0.0"、6677))
localhost
または127.0.0.1
をバインドすると、ローカルからサービスにのみ接続できることを意味します。
10.0.0.1
をバインドすることはできません。これは自分のものではないであるため、コンピューターが所有するIPをバインドする
0.0.0.0
をバインドできるのは、コンピューター上のすべてのIPを意味するためです。したがって、可能な場合はすべてのIPがサービスに接続できますIPのいずれかに接続