我是新来的套接字,请原谅我完全缺乏理解。
我有一个服务器脚本(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
但我收到以下错误:
中文件“client.py”的第9行
s.connect((host,port))
文件"/usr/lib/python2.7/socket.py",第224行,冰毒
返回getattr(self.sock,name)(*args)
插座错误:[Errno 111]连接被拒绝
我试过使用不同的端口号,但没有用。然而,我能够在客户端脚本中使用相同的ip和gethostname()方法获得主机名,并且我能够ping桌面(服务器)。
假设s=插座。socket()可以通过以下方法绑定服务器:方法1:
host = socket.gethostname()
s.bind((host, port))
方法2:
host = socket.gethostbyname("localhost") #Note the extra letters "by"
s.bind((host, port))
方法3:
host = socket.gethostbyname("192.168.1.48")
s.bind((host, port))
如果您在客户端不完全使用相同的方法,您将得到错误:socket.errorerrno 111连接被拒绝。
因此,您必须在客户端使用与在服务器上完全相同的方法来获取主机。例如,对于客户端,您将相应地使用以下方法:
方法1:
host = socket.gethostname()
s.connect((host, port))
方法2:
host = socket.gethostbyname("localhost") # Get local machine name
s.connect((host, port))
方法3:
host = socket.gethostbyname("192.168.1.48") # Get local machine name
s.connect((host, port))
希望能解决问题。
此错误意味着无论出于何种原因,客户端都无法连接到运行服务器脚本的计算机上的端口。这可能是由一些原因造成的,比如缺少到目的地的路由,但由于您可以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
,这使得从不同主机进行连接变得不可能。
问题内容: 我是Socket的新手,请原谅我完全不了解。 我有一个服务器脚本(server.py): 和客户端脚本(client.py): 我转到台式机终端并通过键入以下命令启动脚本: 之后,我进入笔记本电脑终端并启动客户端脚本: 但出现以下错误: 在第9行的文件“ client.py”中 s.connect((主机,端口)) 文件“ /usr/lib/python2.7/socket.py”,第
线程“main”org.springframework.web.client.resourceAccessException中的异常:“http://localhost:8081/footballershirt/footballershirts”的GET请求上的I/O错误:拒绝连接:连接;嵌套的异常是java.net.connectException:Connection:Connection a
我正在尝试运行卡桑德拉,但每次它在连接时都会给出相同的错误...有什么我需要在配置文件或属性文件中编辑的吗? ('无法连接到任何服务器',{'127.0.0.1:9042 ':错误(61,"尝试连接到[('127.0.0.1 ',9042)]。最后一个错误:连接被拒绝")}) 启动cassandra时出错
我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed
问题内容: 我正在尝试将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请求在