2015-05-01 3 views
1

У меня есть программа, которая имеет следующую структуруPython TCP Threading

2 Threads 
1 socket 

Thread 1: 
Sending data to different clients 

Thread 2: 
Receiving data from different clients 

Могу ли я использовать тот же сокет для этого приложения? Или мне нужно использовать другой порт для подключения и получения данных?

ответ

0

Модуль SocketServer.ThreadingTCPServer может использоваться для обработки запроса и ответа tcp при многопоточности.

import SocketServer 
import sys 

class MyTCPHandle(SocketServer.StreamRequestHandler): 
    def handle(self): 
     do_something() 

if __name__ == "__main__": 
    mockserver = SocketServer.ThreadingTCPServer(('', int(sys.argv[1])), MyTCPHandle) 

    mockserver.serve_forever() 
0

Описание совершенно недостаточно - Если есть одни и те же клиенты, к которым вы хотите отправить данные и получать данные, стандартной практикой является один сокет за соединение (TCP), или если ваше приложение UDP, вы действительно может просто использовать только один сокет, за исключением того, что вы должны сделать много государственного обслуживания в приложении. (например, получение удаленного адреса в recvfrom - сохранение его в некоторой структуре для последующего использования и использование этого для отправки на другой конец). Также - когда у вас есть два потока - любой доступ к «совместному состоянию должен быть синхронизирован», добавляя дополнительные служебные данные. Поэтому, если вы не можете конкретно сказать о том, что вы хотите сделать - хорошей стратегии сложно сказать.