报错: descriptor 'sendto' requires a '_socket.socket' object but received a 'bytes' 这怎么解决啊!


from threading import Thread
from socket import *
import os
#获取电脑ip
computername=gethostname()
global 本机ip
本机ip=gethostbyname(computername)
print(computername)
print(本机ip)
服务端ip='100.71.2.02'
端口号=6760

while True:
    ip=本机ip
    socket.sendto(ip.encode(),(服务端ip,端口号))
    break
def receive():
    msg=socket.recv(1024)
    print('服务端信息:',msg.decode())

def send():
    info=input("请输入:")
    socket.sendto(info.encode(),(服务端ip,端口号))
s=socket(AF_INET,SOCK_DGRAM)
s.bind((服务端ip,端口号))
t1=Thread(target=receive)
t2=Thread(target=send)
t1.start()
t2.start()

这个错误很可能是因为你未正确实例化 Socket 对象或未将其赋值给变量 s。在你的代码中,你正在向未实例化的 Socket 对象 socket 上调用 sendto() 方法,因此 Python 抛出了上述错误。

为了解决这个问题,你应该改为使用 s.sendto() 而不是 socket.sendto()。即在调用 sendto() 方法时,使用你已经实例化的 Socket 对象 s,而不是调用未定义的 socket 对象。相应地,需要将 s 作为 receive()send() 函数的参数来确保这些函数也正确地使用了相同的连接对象。

以下是修改后的代码:

from threading import Thread
from socket import *
import os

# 获取电脑ip
computername = gethostname()
global 本机ip
本机ip = gethostbyname(computername)
print(computername)
print(本机ip)

服务端ip = '100.71.2.02'
端口号 = 6760

s = socket(AF_INET, SOCK_DGRAM)
s.bind((本机ip, 端口号))

while True:
    ip = 本机ip
    s.sendto(ip.encode(), (服务端ip, 端口号))
    break

def receive(s):
    msg = s.recv(1024)
    print('服务端信息:', msg.decode())

def send(s):
    info = input("请输入:")
    s.sendto(info.encode(), (服务端ip, 端口号))

t1 = Thread(target=receive, args=(s,))
t2 = Thread(target=send, args=(s,))
t1.start()
t2.start()

此外,你需要注意在 receive() 和 send() 函数中传入了参数 s,以确保这些函数使用了正确的 Socket 对象。