62

私のサーバーソフトウェアは、バインディングerrno99: cannot assign requested address以外のIPアドレスを使用していると言います。127.0.0.1

しかし、IPアドレスがあれば127.0.0.1動作します。名前空間に関連していますか?

を呼び出して、サーバーとクライアントのコードを別の Python プログラムで実行していますexecfile()。私は実際に mininet のソース コードを編集しています。 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()
4

5 に答える 5

56

物事を基本に落とし込むと、これはあなたがテストしたいものです:

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 True:
    recvieved_data = client_socket.recv(1024)
    print(recvieved_data)

これは、いくつかのことを前提として機能します。

  1. あなたのローカル IP アドレス (サーバー上) は 10.0.0.1 です (このビデオではその方法を説明しています)
  2. ポート 6677 でリッスンしているソフトウェアは他にありません

また、IP アドレスの基本概念にも注意してください。

次のことを試して、「検索」フィールドタイプでスタートメニューを開き、cmdEnterキーを押します。黒いコンソールが開いたら、入力ping www.google.comすると、Google の IP アドレスが表示されます。このアドレスは Google のローカル IP であり、Google が所有する IP アドレスにバインドすることはできません。

そのことを念頭に置いて、独自の IP アドレスのセットを所有しています。最初にサーバーのローカル IP を取得しますが、次に自宅のローカル IP を取得します。下の図192.168.1.50は、バインドできるサーバーのローカル IP です。あなたはまだ所有83.55.102.40していますが、問題はそれがあなたのサーバーではなくルーターによって所有されていることです。したがって、http://whatsmyip.comにアクセスして、あなたの IP が83.55.102.40そうではないことを示しているとしても、それはあなたがどこから来ているかしか見ることができず、ルーターからインターネットにアクセスしているためです。

ここに画像の説明を入力

友達があなたのサーバー ( にバインドされている) にアクセスするには、ポートを192.168.1.50に転送する必要があります。これはルーターで行われます。あなたが1つの後ろにいると仮定します。6677192.168.1.50

あなたが学校に通っている場合、他のジレンマやルーターが邪魔になる可能性が最も高い.

于 2013-10-09T09:25:51.613 に答える
9

localhostまたはをバインドすると、ローカルからのサービスに接続127.0.0.1できることを意味します。

自分10.0.0.1のものではないためバインドできません。バインドできるのは、自分のコンピュータが所有する IPのみです。

バインドできる0.0.0.0のは、コンピューター上のすべての IP を意味するためです。したがって、IPのいずれかに接続できる場合、どの IP もサービスに接続できます。

于 2019-07-26T12:43:21.107 に答える