Python 线程化TCP服务器: "名称或服务未知

0 投票
1 回答
1105 浏览
提问于 2025-04-18 02:14

我正在开发一个多线程的TCP服务器,用来和同一台机器上的PHP应用进行通信。这个服务器的目的是接收来自PHP应用的请求,并使用ffmpeg在本地转换一些视频。

以下是代码:

# -*- coding: utf-8 -*- 
import os
import socket
import threading
import logging.config
import SocketServer, time
from queuev2 import QueueServer

logging.basicConfig(format='[%(asctime)s.%(msecs).03d] %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filename=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'converter.log'), level=logging.INFO)

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        data = self.request.recv(1024)
        cur_thread = threading.current_thread()
        response = "{}: {}".format(cur_thread.name, data)
        videoPool.add(data)
        print "Output! %s" % data
        self.request.sendall(response)

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass

if __name__ == "__main__":

    logging.info("Initializing...")
    videoPool = QueueServer()
    HOST, PORT = "localhost", 6666

    server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
    ip, port = server.server_address

    # Start a thread with the server -- that thread will then start one
    # more thread for each request
    server_thread = threading.Thread(target=server.serve_forever)

    # Exit the server thread when the main thread terminates
    server_thread.daemon = True
    server_thread.start()

    print("Server loop running in thread: %s" % server_thread.name)

    # "Groundhog day" time
    while True:
        time.sleep(999)
        pass

    #server.shutdown()

在我的开发笔记本上,这个程序运行得很好,但在服务器上我遇到了以下错误:

Traceback (most recent call last):
  File "server.py", line 31, in <module>
    server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
  File "/usr/lib/python2.7/SocketServer.py", line 408, in __init__
    self.server_bind()
  File "/usr/lib/python2.7/SocketServer.py", line 419, in server_bind
    self.socket.bind(self.server_address)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.gaierror: [Errno -2] Name or service not known

我猜这可能和我使用的端口(6666)有关,但我尝试了其他端口也没有成功。请问Unix域套接字在这里有用吗?能给我一个例子吗?

1 个回答

0

确实是个端口的问题。
Unix域套接字解决了这个问题。

撰写回答