python - 基本 UDP 和 TCP 程序

标签 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 中运行它时,它会抛出一个不稳定的问题,你知道我哪里出错了吗?

最佳答案

对于我来说,在 Windows 上它启动得很好。

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

例如

sudo python ./yourserver.py

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

它们具有相同的端口号是可以的。如果是 2 个 tcp 服务,那就不行了。请参阅here .

编辑:

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

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

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

关于python - 基本 UDP 和 TCP 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022329/

相关文章:

sockets - Websphere:本地机器上的 Web 服务调用挂起

python - 理解/解码收到的数据包

python - Django - 页面未找到 404

python - Pycharm (JetBrains) 无法修改我的 macbook 上的只读目录

python - 在 Ubuntu 16 上安装 openCV 时如何在 cmake 中包含 libgtk2.0-dev 和 pkg-config

java - 循环 Futures - 你应该先检查 isDone 吗?

python - 在 Python 中使用元组更新 2D 列表

c++ - std::thread - 逐行读取文件

c++ - QAbstractItemModel 子类线程安全吗?

linux - 结合sento()写writev()?