Python - 套接字 - 网络 - 非常简单

时间:2016-10-05 16:17:04

标签: python multithreading sockets networking

不幸的是,即使经过一个小时的搜索,我也无法找到答案。

我从在线教程中借用了这个--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()

我有两个问题:

  1. 在代码host = '127.0.0.1'中。但是,如果我使用socket.gethostbyname(socket.gethostname()),我会收到套接字错误。谁能告诉我为什么会这样呢?当我将类似的代码部署到外部计算机时,它不应该有创建套接字的问题。

  2. 我创建了一个持续运行的线程。为什么关闭值(在线程启动后声明)能够停止rT线程并打破while循环?我无法理解物理学,并对它的工作感到惊讶。

1 个答案:

答案 0 :(得分:1)

我对第一个问题不是100%肯定,但对于第二个问题shutdown是一个全局变量。从主线程生成的任何线程都能够看到shutdown

你能发布你得到的套接字错误吗?