我从Python 3.6.2得到一个错误:TypeError:getsockaddrarg:AF_INET地址必须是元组,而不是字节

时间:2017-11-30 18:59:38

标签: python

我已经在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

1 个答案:

答案 0 :(得分:2)

documentation说:

  

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)

(地址在上面正确定义)