我是套接字编码的新手。我只想通过本地网络从客户端向服务器发送消息。 我有一台 Macbook M1 和一台 Pi4。我把这个套接字客户端放在MacBook上并给它pi4的IP。
import socket
SERVER = "192.168.1.136" # Pi4 IP
PORT = 8080
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((SERVER, PORT))
client.sendall(bytes("This is from Client", "UTF-8"))
while True:
in_data = client.recv(1024)
print("From Server :", in_data.decode())
out_data = input()
client.sendall(bytes(out_data, "UTF-8"))
if out_data == "bye":
break
client.close()
我在 pi4 上运行此服务器脚本。
import socket
LOCALHOST = "127.0.0.1"
PORT = 8080
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((LOCALHOST, PORT))
server.listen(1)
print("Server started")
print("Waiting for client request..")
clientConnection, clientAddress = server.accept()
print("Connected clinet :", clientAddress)
msg = ""
while True:
in_data = clientConnection.recv(1024)
msg = in_data.decode()
if msg == "bye":
break
print("From Client :", msg)
out_data = "recieved"
clientConnection.send(bytes(out_data, "UTF-8"))
print("Client disconnected....")
clientConnection.close()
我收到错误:
client.connect((SERVER, PORT))
ConnectionRefusedError: [Errno 61] Connection refused
如果客户端和服务器脚本都在 Mac 或 pi4 上运行,则它们会按预期工作。
我遵循了许多教程并在网上搜索了解决方案。以上代码基于https://net-informations.com/python/net/socket.htm。
按照许多论坛的建议,我已经在 Mac 和 Pi4 上安装了 telnet,以尝试缩小问题范围。作为套接字理论的新手,我不确定我是否完全理解了一些术语。
我只是希望看到本地网络上两个无线连接设备之间的连接工作方式与服务器和客户端在同一设备上运行时的连接工作方式相同
我还有一个 Pi 零 W。我已经尝试了三个设备之间的客户端和服务器的所有排列,注意在每种情况下为客户端提供服务器设备 IP。全部返回“连接被拒绝”错误。
您正在将服务器套接字绑定到
localhost
:
LOCALHOST = "127.0.0.1"
PORT = 8080
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((LOCALHOST, PORT))
这意味着您无法从 Pi 本身以外的任何地方连接到您的 Pi。如果您希望能够从网络上的其他位置连接到您的 Pi,请绑定到
INADDR_ANY
(0.0.0.0
):
PORT = 8080
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', PORT))