当前位置: 首页 > 面试题库 >

为什么在Python中出现错误“连接被拒绝”?(插座)

和和煦
2023-03-14
问题内容

我是Socket的新手,请原谅我完全不了解。

我有一个服务器脚本(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

但出现以下错误:

在第9行的文件“ client.py”中

s.connect((主机,端口))

文件“ /usr/lib/python2.7/socket.py”,第224行,以meth格式

返回getattr(self._sock,name)(* args)

socket.error:[Errno 111]连接被拒绝

我尝试使用其他端口号无济于事。但是,我能够在客户端脚本中使用相同的ip和gethostname()方法获取主机名,并且可以ping通台式机(服务器)。


问题答案:

代替

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

你应该试试

port = 12397 # Reserve a port for your service
s.bind(('', port)) #Bind to the port

这样监听套接字就不会太受限制。否则,侦听可能只发生在一个接口上,而该接口又与本地网络无关。

一个示例可能是它仅侦听127.0.0.1,这使得不可能从其他主机进行连接。



 类似资料:
  • 我是新来的套接字,请原谅我完全缺乏理解。 我有一个服务器脚本(server.py): 和客户端脚本(client.py): 我进入桌面终端,通过键入以下内容启动脚本: 之后,我转到笔记本电脑终端并启动客户端脚本: 但我收到以下错误: 中文件“client.py”的第9行 s.connect((host,port)) 文件"/usr/lib/python2.7/socket.py",第224行,冰毒

  • 线程“main”org.springframework.web.client.resourceAccessException中的异常:“http://localhost:8081/footballershirt/footballershirts”的GET请求上的I/O错误:拒绝连接:连接;嵌套的异常是java.net.connectException:Connection:Connection a

  • 问题内容: 我正在尝试将Redis用作我的使用Docker Compose的Django项目的Celery的代理。我无法弄清楚我到底做错了什么,但是尽管控制台日志消息告诉我Redis正在运行并接受连接(实际上,当我这样做时,我可以看到容器正在运行),但我仍然会收到有关拒绝连接的错误消息。我什至做到了 看到回应是。 这是my中的Celery设置: 这是my中的Redis容器设置: 我还记得将容器与我

  • 有一个关于阿帕奇的 php 文件: 和节点js在同一个目录中 浏览器抛出错误:GEThttp://192.168.100.31/socket.io/?EIO=4 如果替换let套接字=io.connect('http://localhost:3000')在let套接字=io.connect('http://192.168.100.31:3000');浏览器将给出另一个错误:访问XMLHttp请求在

  • 所以我在很长时间后再次安装了Android Studio,它要求我配置代理,所以我照做了。我测试了连接,它起作用了。 然后它让我为Gradle配置代理设置,我使用了相同的配置。 现在,在加载最新的 Vuforia 示例项目时,我收到一个错误: 分级同步失败:连接被拒绝:连接 我在网上到处都找遍了,但找不到解决办法。不可能是代理设置;我已经像IDE一样配置了Gradle。

  • 我正在使用rest模板调用外部系统,它在本地运行正常,没有任何超时设置,但在我的测试服务器上,它给了我以下错误: “的POST请求时出现I/O错误”https://externalsystem/url“:连接被拒绝:连接;嵌套的异常是java。网ConnectException:连接被拒绝:连接