我試圖實現具有多個客戶端的簡單服務器。它應該從必要的套接字接收數據,然後將數據發送到其他客戶端。我使用Python標準庫中的選擇模塊。 這裏的服務器:具有多個客戶端的簡單服務器
class ProcessingServer:
def __init__(self, bindaddress="localhost", portname=50001, maxqueue=5):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.bind((bindaddress, portname))
self.socket.listen(maxqueue)
self.inputsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.data = ""
def connect_to_output(self, address, port):
self.inputsocket.connect((address, port))
def start(self):
rsocks = []
wsocks = []
rsocks.append(self.socket)
wsocks.append(self.inputsocket)
self.socket.accept()
while True:
try:
reads, writes, errs = select.select(rsocks, wsocks, [])
except:
return
for sock in reads:
if sock == self.socket:
client, address = sock.accept()
rsocks.append(client)
else:
self.socket.send(self.data)
rsocks.remove(sock)
for sock in writes:
if sock == self.inputsocket:
self.data = sock.recv(512)
wsocks.remove(sock)
print repr(self.data)
這是一個簡單的客戶端:
import socket
mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysocket.connect(("localhost", 50001))
while True:
data = mysocket.recv(512)
print repr(data)
mysocket.close()
接收服務器的一部分工作正常,但服務器不會產生任何輸出。 我沒有在網絡編程方面的經驗,感覺就像我錯過了一些東西。
(whispers)__twisted__ –
謝謝,但我想保持儘可能簡單的事情)) – qutron
扭曲遠比使用套接字簡單。你甚至不必擔心線程。 Twisted會爲你做爵士樂。 –