【发布时间】:2013-10-15 06:45:33
【问题描述】:
我的服务器软件显示errno99: cannot assign requested address,同时使用127.0.0.1 以外的IP 地址进行绑定。
但是如果 IP 地址是 127.0.0.1 它可以工作。
和命名空间有关吗?
我正在通过调用execfile() 在另一个python 程序中执行我的服务器和客户端代码。
我实际上正在编辑 mininet 源代码。我编辑了 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()
【问题讨论】:
-
向我们展示一些代码,否则我们无法帮助您。 (最好是如何设置套接字,以及如何通过调用
execfile()执行“服务器”(顺便说一句,使用execfile()的任何原因?)) -
当您尝试 127.0.0.1 以外的其他地址时,您使用的是哪个地址?我通过绑定到某些无效 IP 重现了您的错误。记住一个服务器只能绑定自己,所以你给的IP或者名字必须是服务器之一...
-
当您绑定()时,您将套接字与本地 IP 地址和端口相关联。所以,只要地址是本地的,包括 127.0.0.1(本地地址),绑定就可以工作。但是,尝试绑定到非本地地址会导致上述错误。
-
@Torxed 我已经编辑了问题。请仔细阅读。
-
@user2833462
10.x.x.x、172.16.x.x、192.168.x.x或127.0.0.x是本地网络。但可悲的是,83.127.224.44是一个本地 address (并且它是您要绑定到的本地 address),因为它是分配给您计算机的地址。 (即,您无法将bind()发送到“www.google.com”,因为您不拥有它,但如果您拥有“www.made-up-example.com”,则可以绑定到那个地址,一旦你理解了这个基本概念,你就需要绑定到 made-up-example.com 的 IP 而不是地址本身)。
标签: python sockets namespaces ip