2016-11-24 88 views
0

我刚刚开始学习Python中的Socket库。我正在学习一个教程,但在第一个例子中,当我尝试运行它时遇到错误。连接插座给了ConnectionRefusedError

import socket    # Import socket module 

s = socket.socket()   # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 12345    # Reserve a port for your service. 

s.connect((host, port)) 
print(s.recv(1024)) 
s.close 

起初我手写它,但经过几次评论后得到错误信息,我直接将文本复制到Python并运行它。但由于某种原因,我仍然得到这个错误。

Traceback (most recent call last): 
    File "C:\Users\elikerr\Documents\socketFirstServer.py", line 7, in <module> 
    s.connect((host, port)) 
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it 

有人可以详细说明发生了什么问题。 这是我正在关注的tutorial。 我已经检查了Stack Exchange上的一些答案,但他们都没有回答我的问题,或者,如果他们这样做,我不知道套接字知道我在找什么。

+3

端口12345是否打开? –

+0

如何检查端口是否打开? –

+1

您是否编写了一个侦听该端口的服务器,并且在运行客户端之前运行它?如果不是,你期望连接到什么? – Barmar

回答

1

由于您只发布客户端代码,我会假设您在设置服务器之前先写入客户端。

您需要将以下代码放在文件(server.py)中并运行它。

#!/usr/bin/python   # This is server.py file 

import socket    # Import socket module 

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

s.listen(5)     # Now wait for client connection. 
while True: 
    c, addr = s.accept()  # Establish connection with client. 
    print 'Got connection from', addr 
    c.send(b'Thank you for connecting') # Send bytes 
    c.close()    # Close the connection 

现在验证服务器是否正在运行,像这样:

C:\Users\pp9x2>netstat -an | findstr 12345 
TCP 192.168.56.1:12345  0.0.0.0:0    LISTENING 

现在使用您发布确切的代码,一切都应该只是工作。

+0

谢谢。我会在稍后尝试。 –

+0

另外,您是否需要连接到互联网才能正常工作? –

+0

不,你不需要互联网。您可以在没有任何网络设备的情况下执行此操作,因为您正在或将要在同一台计算机上同时运行服务器和客户端。看看这个维基百科[文章](https://en.wikipedia.org/wiki/Network_socket)它的简短并可能会清除一些事情。不管怎样,如果它回答你的问题,请不要忘记接受我的答案。 – preezzzy