我是Sockets的新手,请原谅我完全缺乏理解.
我有一个服务器脚本(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()
Run Code Online (Sandbox Code Playgroud)
和客户端脚本(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
Run Code Online (Sandbox Code Playgroud)
我转到桌面终端并输入以下命令启动脚本:
python server.py
Run Code Online (Sandbox Code Playgroud)
之后,我去我的笔记本电脑终端并启动客户端脚本:
python client.py
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
文件"client.py",第9行,in
s.connect((主机,端口))
文件"/usr/lib/python2.7/socket.py",第224行,在meth
return getattr(self._sock,name)(*args)
socket.error:[Errno 111]连接被拒绝
我尝试使用不同的端口号无济于事.但是,我能够在客户端脚本中使用相同的ip和gethostname()方法获取主机名,我可以ping桌面(服务器).
glg*_*lgl 67
代替
host = socket.gethostname() #Get the local machine name
port = 12397 # Reserve a port for your service
s.bind((host,port)) #Bind to the port
Run Code Online (Sandbox Code Playgroud)
你应该试试
port = 12397 # Reserve a port for your service
s.bind(('', port)) #Bind to the port
Run Code Online (Sandbox Code Playgroud)
这样监听套接字不会受到太多限制.也许否则,监听仅发生在一个接口上,而接口又与本地网络无关.
一个例子可能是它只听127.0.0.1,这使得从不同的主机连接变得不可能.
此错误意味着无论出于何种原因客户端无法连接到运行服务器脚本的计算机上的端口.这可能是由少数事情引起的,例如缺少到目的地的路由,但由于您可以ping服务器,情况应该不是这样.另一个原因可能是您的客户端和服务器之间有防火墙 - 它可能位于服务器本身或客户端上.鉴于您的网络寻址,我假设服务器和客户端都在同一个局域网上,因此不应该涉及任何阻止流量的路由器.在这种情况下,我会尝试以下方法:
netstat -ntulptelnet LISTENING_IP LISTENING_PORT应该完成这项工作然后让我们知道调查结果.