Python套接字编程-ConnectionRefusedError:[WinError 10061]无法建立连接,因为目标计算机主动拒绝了它

时间:2019-02-16 20:03:47

标签: python sockets client

我正在使用客户端和服务器进行有关python中套接字编程的任务。我目前在Windows 10上。在开始有关分配的小细节之前,我一直在尝试简单地连接服务器和客户端。

每次尝试运行客户端文件时,都会出现此错误

File "tcpclient.py", line 9, in <module>
    s.connect((host, port))
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

我打开了防火墙端口,但什么也没有。我已经尝试在客户端和服务器文件中用'',0.0.0.0,socket.gethostname()替换主机,但是错误仍然存​​在。我什至尝试了不同的端口号,但没有区别。我尝试在Ubuntu和Max上运行此代码,但遇到相同的错误-连接被拒绝。我一直在研究许多解决方案,但仍然没有找到可行的解决方案。任何帮助将不胜感激!

注意:此代码已在线获取,但它实际上是我需要完成的基础。 tcpclient.py

import socket

host = '127.0.0.1'
port = 80
buffer_size = 1024
text = "Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send(text)
data = s.recv(buffer_size)
s.close()

print("received data:", data)

tcpserver.py

import socket

host = '127.0.0.1'
port = 80
buffer_size = 20  

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(buffer_size)
if not data: break
print("received data:", data)
conn.send(data)  # echo
conn.close()

2 个答案:

答案 0 :(得分:0)

对于client.py

import socket
host = '127.0.0.1'
port = 9879
buffer_size = 1024
text = "Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
text = text.encode('utf-8')
s.send(text)
data = s.recv(buffer_size)
s.close()
print("received data:", data)

对于server.py

import socket
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
buffer_size = 1024
text = "Hello, World!"
mysocket.bind(('127.0.0.1', 9879))
mysocket.listen(5)
(client, (ip,port)) = mysocket.accept()
print(client, port)
client.send(b"knock knock knock, I'm the server")
data = client.recv(buffer_size)
print(data.decode())
mysocket.close()

只需更改端口号即可使用,如果您使用的是python3,则必须作为套接字接收方进行编码和解码,并且仅发送二进制字符串。

答案 1 :(得分:0)

我在服务器上成功!

我的服务器python脚本如下:

    import socket
    host='0.0.0.0'
    port=2345
    s=socket.socket()
    s.bind((host,port))
    s.listen(2)
    while True:
    conn,addr=s.accept()
    print("Connected by",addr)
    data=conn.recv(1024)
    print("received data:",data)
    conn.send(data)
    conn.close()

我的客户端python脚本如下:

import socket
s=socket.socket()
host="xx.xx.xx.xx"       #This is your Server IP!
port=2345
s.connect((host,port))
s.send(b"hello")
rece=s.recv(1024)
print("Received",rece)
s.close()

脚本中需要注意两点:

1。服务器的主机必须为

  

'0.0.0.0'

以便python脚本可以使用服务器中的所有接口

2。我已经通过提示符找到问题的错误:

  

TypeError:需要一个类似字节的对象,而不是'str'

这意味着'send'方法中的每个字符串消息都需要转换为'bytes-like object',所以正确的是

  

s.send(b“ hello”)

重要的是这不是b'hello''hello'