我正在使用 python 的套接字庫。我正在嘗試制作本地服務器,服務器運行正常但客戶端沒有。當我說我想連接到 AF_INET 時,它給了我一個 TypeError。它說 AF_INET 地址必須是一個元組,當它是一個字串時。這是我的代碼。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(socket.gethostname())
print("client successfully started")
msg = s.recv(1024)
print(msg.decode("utf-8"))
如果有幫助,我正在使用 3.10.0 版。
uj5u.com熱心網友回復:
該connect函式接受 a tuple,因此您需要一組額外的括號。目前尚不清楚您要做什么gethostname。此外,您需要有一個埠號才能連接。如果您嘗試收聽localhost,代碼將如下所示:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Add socket.gethostbyname and add port number
s.connect((socket.gethostbyname(socket.gethostname()), 8089)) # Add another set of parentheses as you need a tuple
print("client successfully started")
msg = s.recv(1024)
print(msg.decode("utf-8"))
即使這樣也可能導致ConnectionRefusedError: [Errno 61] Connection refused錯誤,因為您可能必須使用ip來自服務器的。類似的東西:192.168.0.1。要獲取您的ip,請ipconfig在您的 cmd 提示符下執行(在 Windows 上)。
所以正確的代碼應該是這樣的:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect('192.168.0.1', 8089)) # Your IP instead of 192.168.0.1
print("client successfully started")
msg = s.recv(1024)
print(msg.decode("utf-8"))
uj5u.com熱心網友回復:
從套接字檔案:
一對
(host, port)用于AF_INET地址系列,其中 host是一個字串,表示 Internet 域表示法中的主機名'daring.cwi.nl'或 IPv4 地址,如
'100.50.200.5',并且port是一個整數。
- 對于 IPv4 地址,接受兩種特殊形式來代替主機地址:
''代表 INADDR_ANY,用于系結到所有介面,字串'<broadcast>'代表
INADDR_BROADCAST。此行為與 IPv6 不兼容,因此,如果您打算在 Python 程式中支持 IPv6,則可能需要避免這些行為。
對于本地服務器,您可以只'localhost'用于客戶端。
例子:
from socket import *
PORT = 5000
# for server
s = socket() # AF_INET and SOCK_STREAM are the default
s.bind(('',PORT)) # must be a 2-tuple (note the parentheses)
s.listen()
c,a = s.accept()
# for client
s = socket()
s.connect(('localhost',PORT))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407208.html
標籤:
