【发布时间】:2011-11-02 00:25:56
【问题描述】:
我正在尝试实现具有多个客户端的简单服务器。它应该从必要的套接字接收数据,处理然后将数据发送给其他客户端。我使用 Python 标准库中的 select 模块。 这是服务器:
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()
接收部分服务器工作正常,但服务器不产生任何输出。 我对网络编程一点经验都没有,感觉好像漏掉了什么。
【问题讨论】:
-
谢谢,但我想让事情尽可能简单))
-
Twisted 比使用套接字要简单得多。您甚至不必担心线程。 Twisted 为您所有爵士乐。
标签: python sockets networking