簡體   English   中英

使用 Python 套接字的 PC(Linux)和 RPi 之間的連接被拒絕

[英]Connection refused between PC(Linux) and RPi using Python socket

我遇到了一個大問題,我無法解決。 我嘗試檢查多個答案但沒有結果。 主要任務:PC 和樹莓派之間的連接使用 TCP/IP 以太網。
我的代碼如下所示:
服務器:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(),1234))
s.listen(5)

while True:
    client, address = s.accept()
    print(f"Connection from {address} succesfully!")
    client.send(bytes("Hello!", "utf-8"))
s.close()

客戶:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(),1234))
Message = "HeloWorld!"
s.send(byte(Message))

s.close()

錯誤是: ConnectionRefusedError: [Errno 111] Connection denied

我應該怎么辦?

看來您混淆了功能。
socket.gethostname()

返回一個字符串,其中包含 Python 解釋器當前正在執行的機器的主機名

你可以檢查它:

print socket.gethostname()

但是socket.connect() function 想要一個地址(這取決於協議族)。 因此,您可能希望使用主機的 IP 地址或通過socket.gethostbyname()將主機的域名解析為 IP 地址。

你還有幾個錯別字。 要使其工作(客戶端和服務器都在同一主機上的情況下的注釋行),請嘗試:
服務器:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.bind((socket.gethostbyname(socket.gethostname()), 31337))

# suppose 192.168.0.2 is IP of one of your server's network interfaces
s.bind(("192.168.0.2", 31337))
s.listen(5)

while True:
    client, address = s.accept()
    print "Connection from ", address, ", message:", client.recv(32)
    client.send(bytes("WTF"))
s.close()

客戶:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.connect((socket.gethostbyname(socket.gethostname()), 31337))
s.connect(("192.168.0.2", 31337))
s.send(bytes("Hello, World!"))
print "Message from server: ", s.recv(32)
s.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM