我正在尝试编写一个简单的服务器,它将监听 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/