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()
报错: descriptor 'sendto' requires a '_socket.socket' object but received a 'bytes' 这怎么解决啊!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
辞轩. 2023-06-11 11:56关注这个错误很可能是因为你未正确实例化 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 对象。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报