我已经在StackOverflow上搜索了,但是没有一个提到过的技巧。 以下是我的代码。
from socket import *
import time
address= ( '10.1.15.243', '5000') #Server data
client_socket =socket(AF_INET, SOCK_DGRAM) #Socket klaarzetten
client_socket.settimeout(1) #Response time
while(1):
data = "Positie" #Data request = Positie
client_socket.sendto( (b'10.1.15.243'), (b'5000') ) #Data aanvragen
try:
rec_data, addr = client_socket.recvfrom(2048) #Read response from arduino
temp = float(rec_data) #Convert string rec_data naar float temp
with open('resultaten.txt', 'w') as f: #Data in TXT opslaan
print('Positie:', filename, file=f) #Data confirmen
except:
pass
答案 0 :(得分:2)
AF_INET地址系列使用一对(主机,端口),其中host是一个字符串,表示Internet域符号中的主机名,例如' daring.cwi.nl'或者像' 100.50.200.5'这样的IPv4地址,端口是一个整数。
sendto
期待消息&地址所以2个参数。你传递了这个:
client_socket.sendto( (b'10.1.15.243'), (b'5000') )
从sendto
查看,消息为b'10.1.15.243'
,地址为b'5000'
。 b"5000"
是一个字节对象,它解释了错误消息。这里的括号没有任何效果(即使它们确实定义了元组,那仍然是不正确的)。而且,你也忘记了你的有效载荷......
由于address
是一个正确的地址元组(('10.1.15.243','5000')
),只需执行:
data = b"Positie" # needs to be bytes object
client_socket.sendto(data, address)
(地址在上面正确定义)