0
不幸的是,即使经过一个小时的搜索,我仍然无法找到答案。Python - 套接字 - 网络 - 非常简单
我借这个从网上教程 - 的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循环?我无法理解物理学,并惊讶它正在工作。
回溯(最近通话最后一个): 文件 “C:/用户/ kundemj /桌面/网页抓取/ client.py” 35行,在 s.sendto(化名+ “:” +消息,服务器) socket.error:[Errno 10049]请求的地址在其上下文中无效 –
如果我的变量和线程都是在一个主线程类中定义的,它还可以工作吗? –
@jesh我不知道我理解你的问题吗?你的意思是“在一类主线程中” – bravosierra99