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 对象。