socket.error:[errno 99]无法在python中分配请求的地址和命名空间

2024-04-19 18:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的服务器软件使用errno99: cannot assign requested address以外的ip地址进行绑定时会显示127.0.0.1

但如果IP地址是127.0.0.1,它就可以工作。 它与名称空间有关吗?

我正在另一个python程序中通过调用execfile()来执行服务器和客户端代码。 实际上,我正在编辑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()

Tags: 代码pyimport服务器client编辑客户端input
3条回答

这样试试: server.bind((“0.0.0.0”,6677))

把事情简单化这是你想要测试的:

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)

假设有几件事:

  1. 您的本地IP地址(在服务器上)是10.0.0.1(This video shows you how
  2. 没有其他软件正在端口6677上侦听

还要注意IP地址的基本概念:

尝试以下操作,打开“开始”菜单,在“搜索”字段中键入cmd,然后按回车键。 一旦黑色控制台打开,键入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,情况并非如此,因为它只能看到你来自哪里。。你正在通过路由器访问你的互联网。

enter image description here

为了让您的朋友访问您的服务器(绑定到192.168.1.50),您需要将端口6677转发到192.168.1.50,这在路由器中完成。 假设你在后面。

如果你在学校里,很可能还有其他的困境和麻烦。

当您绑定localhost127.0.0.1时,这意味着您只能从本地连接到服务。

您不能绑定10.0.0.1,因为它不属于您,您只能绑定计算机拥有的ip

您可以绑定0.0.0.0,因为这意味着您计算机上的所有ip,因此任何ip都可以连接到您的服务,如果它们可以连接到您的任何ip

相关问题 更多 >