python3
- 服务端
from collections import namedtuple
from tornado.tcpserver import TCPServer
from tornado.iostream import StreamClosedError
from tornado.ioloop import IOLoop
Client = namedtuple('Client', ['stream', 'address'])
class ChatServer(TCPServer):
clients = set()
async def handle_stream(self, stream, address):
print("A new user has entered the chat room.", address)
client = Client(stream, address)
self.clients.add(client)
print("connection num is:", len(self.clients))
while True:
try:
data = await stream.read_until(b'\n')
print("User said:", data[:-1], client.address)
for conn in self.clients:
await conn.stream.write(data)
except StreamClosedError:
print("A user has left the chat room.", client.address)
self.clients.remove(client)
break
if __name__ == '__main__':
print("Server start ......")
server = ChatServer()
server.listen(8000)
IOLoop.instance().start()
- 客户端
HOST = '127.0.0.1' # The remote host
PORT = 8000 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'Hello, \nw')
time.sleep(5)
s.sendall(b'ord! \n')
data = s.recv(1024)
print('Received', repr(data))
time.sleep(60)
s.close()
python2
- 服务端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from tornado.tcpserver import TCPServer
from tornado.ioloop import IOLoop
class Connection(object):
clients = set()
def __init__(self, stream, address):
Connection.clients.add(self)
self._stream = stream
self._address = address
self._stream.set_close_callback(self.on_close)
self.read_message()
print("A new user has entered the chat room.", address)
def read_message(self):
self._stream.read_until(b'\n', self.broadcast_messages)
def broadcast_messages(self, data):
print("User said:", data[:-1], self._address)
for conn in Connection.clients:
conn.send_message(data)
self.read_message()
def send_message(self, data):
self._stream.write(data)
def on_close(self):
print("A user has left the chat room.", self._address)
Connection.clients.remove(self)
class ChatServer(TCPServer):
def handle_stream(self, stream, address):
print("New connection :", address, stream)
Connection(stream, address)
print("connection num is:", len(Connection.clients))
if __name__ == '__main__':
print("Server start ......")
server = ChatServer()
server.listen(8000)
IOLoop.instance().start()
- 客户端
HOST = '127.0.0.1' # The remote host
PORT = 8000 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, \nw')
time.sleep(5)
s.sendall('ord! \n')
data = s.recv(1024)
print('Received', repr(data))
time.sleep(60)
s.close()
参考:https://blog.csdn.net/JunChow520/article/details/103031041