基本UDP& TCP计划

时间:2015-03-12 23:34:47

标签: 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 = 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()

然而,当我在Python 2.7中运行它时会引发一个摇摆不定的想法,我会出错吗?

1 个答案:

答案 0 :(得分:2)

对于我来说,在Windows上,它可以很好地发布。

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

e.g。

sudo python ./yourserver.py

或者将您的端口号更改为1024或更高。

没关系,他们有相同的端口号。如果它是2 tcp服务,虽然它不会。请参阅here

编辑:

鉴于OP对实际问题的澄清,解决方案将被使用。

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

创建套接字后。袜子是你的套接字名称。