@@ -241,6 +241,84 @@ IncompleteReadError
241241Stream examples
242242===============
243243
244+ .. _asyncio-tcp-echo-client-streams :
245+
246+ TCP echo client using streams
247+ -----------------------------
248+
249+ TCP echo client using the :func: `asyncio.open_connection ` function::
250+
251+ import asyncio
252+
253+ def tcp_echo_client(message, loop):
254+ reader, writer = yield from asyncio.open_connection('127.0.0.1', 8888,
255+ loop=loop)
256+
257+ print('Send: %r' % message)
258+ writer.write(message.encode())
259+
260+ data = yield from reader.read(100)
261+ print('Received: %r' % data.decode())
262+
263+ print('Close the socket')
264+ writer.close()
265+
266+ message = 'Hello World!'
267+ loop = asyncio.get_event_loop()
268+ loop.run_until_complete(tcp_echo_client(message, loop))
269+ loop.close()
270+
271+ .. seealso ::
272+
273+ The :ref: `TCP echo client protocol <asyncio-tcp-echo-client-protocol >`
274+ example uses the :meth: `BaseEventLoop.create_connection ` method.
275+
276+
277+ .. _asyncio-tcp-echo-server-streams :
278+
279+ TCP echo server using streams
280+ -----------------------------
281+
282+ TCP echo server using the :func: `asyncio.start_server ` function::
283+
284+ import asyncio
285+
286+ @asyncio.coroutine
287+ def handle_echo(reader, writer):
288+ data = yield from reader.read(100)
289+ message = data.decode()
290+ addr = writer.get_extra_info('peername')
291+ print("Received %r from %r" % (message, addr))
292+
293+ print("Send: %r" % message)
294+ writer.write(data)
295+ yield from writer.drain()
296+
297+ print("Close the client socket")
298+ writer.close()
299+
300+ loop = asyncio.get_event_loop()
301+ coro = asyncio.start_server(handle_echo, '127.0.0.1', 8888, loop=loop)
302+ server = loop.run_until_complete(coro)
303+
304+ # Serve requests until CTRL+c is pressed
305+ print('Serving on {}'.format(server.sockets[0].getsockname()))
306+ try:
307+ loop.run_forever()
308+ except KeyboardInterrupt:
309+ pass
310+
311+ # Close the server
312+ server.close()
313+ loop.run_until_complete(server.wait_closed())
314+ loop.close()
315+
316+ .. seealso ::
317+
318+ The :ref: `TCP echo server protocol <asyncio-tcp-echo-server-protocol >`
319+ example uses the :meth: `BaseEventLoop.create_server ` method.
320+
321+
244322Get HTTP headers
245323----------------
246324
0 commit comments