Python 基本UDP&;TCP程序

Python 基本UDP&;TCP程序,python,multithreading,sockets,Python,Multithreading,Sockets,我正在尝试编写一个简单的服务器,它将侦听UDP上的一组消息和TCP上的另一组消息。我编写了以下代码: from threading import Thread import time import socket #define UDP listening function def UDPListen(): Listening_UDP_Port = 300 Listening_IP = "127.0.0.1" BUFFER_SIZE = 64 sock = s

我正在尝试编写一个简单的服务器,它将侦听UDP上的一组消息和TCP上的另一组消息。我编写了以下代码:

from threading import Thread
import time
import socket 

#define UDP listening function
def UDPListen():
    Listening_UDP_Port = 300
    Listening_IP = "127.0.0.1"
    BUFFER_SIZE = 64

    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # IPv4, UDP
    sock.bind((Listening_IP, Listening_UDP_Port))

    while True:
        data, address = sock.recvfrom(BUFFER_SIZE)
        print "UDP Messsage from address: ", address
        print "Message: ", data

# END UPDListen() FUCNTION


#define a TCP listening function
def TCPListen():
    Listening_TCP_Port = 300
    Listening_IP = "127.0.0.1"
    BUFFER_SIZE = 64

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # IPv4, TCP
    sock.bind((Listening_IP, Listening_TCP_Port))

    while True:
        sock.listen(1)
        conn, address = sock.accept()
        print "TCP connection from", address
        data = conn.recv(BUFFER_SIZE)
        print "Mesage: ", data
        conn.close()

# END TCPListen() FUCNTION


# main function
def main():
    ThreadUDP = Thread(target=UDPListen)
    ThreadTCP = Thread(target=TCPListen)

    print "Starting Server..."
    ThreadUDP.start()
    ThreadTCP.start()
    print "Server Started!"

#END main() FUNCTION


if __name__ == "__main__":
    main()

然而,当我在Python2.7中运行它时,它会发出一个不稳定的声音,你知道我哪里出了问题吗?

对于我来说,在Windows上它可以正常启动

对于linux,您必须以root用户身份运行它,或者使用
sudo

e、 g

或者将端口号更改为1024或更高

它们具有相同的端口号没关系。如果它是2
tcp
服务,尽管它不会正常。看

编辑:

鉴于OP对真实问题的澄清,解决方案是使用

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

在创建套接字之后。其中sock是您的套接字名称。

我认为您不能在同一端口上运行两台服务器……1024以下的端口是为以root用户身份运行的程序保留的。因此,要么将端口号更改为1024以上,要么以root用户身份运行程序(最好是前者)。FWIW我将端口号更改为3000,然后你的程序运行正常。你是在Linux还是Windows上?@JoranBeasley没有冲突。一个在TCP端口上,另一个在UDP端口上。谢谢你的建议,我今天早上意识到这是因为进程终止时服务器没有关闭端口。所以我不得不重新启动机器。需要找到一个很好的方法在完成后关闭它。再次感谢。
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)