不幸的是,即使经过一个小时的搜索,我也无法找到答案。
我从在线教程中借用了这个--Youtube - Draps
import socket, threading, time, wx
tLock = threading.Lock()
shutdown = False
def receiving(name, sock):
while not shutdown:
try:
tLock.acquire()
#while True:
data, addr = sock.recvfrom(1024)
print str(data) + "hehehe"
except:
pass
finally:
tLock.release()
host = '127.0.0.1'
port = 0
server = ('127.0.0.1', 5000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host,port))
s.setblocking(0)
rT = threading.Thread(target = receiving, args = ("RecvThread", s))
rT.start()
alias = raw_input("Name: ")
message = raw_input(alias + "-->")
while message != 'q':
if message != '':
s.sendto(alias + ":" + message, server)
tLock.acquire()
message = raw_input(alias + "-->")
tLock.release()
time.sleep(0.2)
shutdown = True
rT.join()
s.close()
我有两个问题:
在代码host = '127.0.0.1'
中。但是,如果我使用socket.gethostbyname(socket.gethostname())
,我会收到套接字错误。谁能告诉我为什么会这样呢?当我将类似的代码部署到外部计算机时,它不应该有创建套接字的问题。
我创建了一个持续运行的线程。为什么关闭值(在线程启动后声明)能够停止rT线程并打破while循环?我无法理解物理学,并对它的工作感到惊讶。
答案 0 :(得分:1)
我对第一个问题不是100%肯定,但对于第二个问题shutdown
是一个全局变量。从主线程生成的任何线程都能够看到shutdown
你能发布你得到的套接字错误吗?