我正在使用客户端和服务器进行有关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()
答案 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'