Python网络编程--Echo服务

学习网络编程必须要练习的三个小项目就是Echo服务,Chat服务和Proxy服务。在接下来的几篇文章会详细介绍。

今天就来介绍Echo服务,Echo服务是最基本的服务。它的主要特点就是连接与连接之间没有通信。

1. 一问一答Echo

根据官网上的例子,做简单的修改。

echo_server.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- """Echo server program
""" import socket HOST = ''
PORT = 50007 def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
while True:
conn, addr = s.accept()
print('Connected by {}'.format(addr))
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close() s.close() if __name__ == '__main__':
main()

echo_client.py 输入为空时,关闭连接。

#!/usr/bin/env python
# -*- coding: utf-8 -*- """Echo client program
""" import socket HOST = 'localhost'
PORT = 50007 def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while True:
data = raw_input('> ')
if not data:
break
s.sendall(data)
data = s.recv(1024)
if not data:
break print('{}'.format(data))
s.close() if __name__ == '__main__':
main()

先运行服务器程序,再启动客户端程序,如下:

服务器:



客户端:

2. 输入与输出不同

要实现输入与输出不同,就需要解决输入的内容,根据不同的输入(指令)给出不同的应答。

下面我们实现以下几个小功能:

- 输入date,返回当前的日期与时间。

- 输入os,返回操作系统信息。

- 输入ls,列出当前目录的清单。输入ls dir,返回dir目录的文件清单。

echo_server.py

#!/usr/bin/env python
# -*- coding: utf-8 -*- """Echo server program
""" import socket
import time
import os HOST = ''
PORT = 50007 def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# enable address reuse
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
while True:
conn, addr = s.accept()
print('Connected by {}'.format(addr))
while True:
data = conn.recv(1024)
if not data:
break
elif data == 'date':
data = get_date()
elif data == 'os':
data = get_os()
elif data.startswith('ls'):
data = get_ls(data[2:]) conn.sendall(data)
conn.close() s.close() def get_date():
return time.ctime() def get_os():
return os.name def get_ls(dire):
if not dire.strip():
dire = os.curdir return '\n'.join(os.listdir(dire.strip())) if __name__ == '__main__':
main()

echo_client.py 没有变化。

效果如下:

服务器:

客户端:

总结

通过上面的两上小练习,所有类似Echo都应该可以完成了。可以在其基础上进行扩充。比如实现一上HTTP服务器。

Python网络编程--Echo服务的更多相关文章

  1. python网络编程TCP服务多客户端的服务端开发

    #服务多客户端TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何 ...

  2. python网络编程,通过服务名称和会话类型(tcp,udp)获取端口号,简单的异常处理

    作为一个php程序员,同时有对网络方面感兴趣,php就比较蛋疼了,所以就抽了些时间看python 之前学python基础因为工作原因,断断续续的看了个基础,差不多是可以写代码了 最近在看<pyt ...

  3. 图解Python网络编程

    返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...

  4. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  5. Python 网络编程(一)

    Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  6. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  7. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  8. python网络编程-01

    python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...

  9. python 网络编程(Socket)

    # from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...

随机推荐

  1. Qt编程简介与基本知识

    1. 什么是Qt? Qt是一个基于C++的跨平台应用程序和UI开发框架.它包含一个类库,和用于跨平台开发及国际化的工具. 由挪威Trolltech公司开发,后被Nokia收购,目前被Digia公司收购 ...

  2. 【Todo】Python中文及Java中文问题及解决方法总结 & 及各种字符编码问题跟踪贴

    Python中文编码问题看这里吧:http://www.cnblogs.com/charlesblc/p/6159109.html Mysql中文编码问题可以看这篇:http://www.cnblog ...

  3. python核心编程学习(第三版)之网络编程

    套接字 套接字是计算机网络数据结构.在任何类型的通信开始之前,网络应用程序必须创建套接字. 有两种类型的套接字,基于文件和面向网络的. unix套接字是第一个家族,AF_UNIX代表地址家族,缩写AF ...

  4. 深入浅出AOP(四)--AOP的实现步骤

    AOP是什么?有什么用处?怎么实现?在前面的博客中已经写的非常具体了,那么我们怎么一步一步考虑的呢? 在最初的时候,我们知道AOP是一个拦截业务.提供服务的东西.于是我们是这样做的: 后来又了加上了S ...

  5. breakpoints &amp;&amp; lldb &#160;&amp;&amp; chisel 的使用

    Breakpoints BreakPoint分类 breakpoint也是有分类的.我这里的文章内大致按使用的方式分为了 Normal Breakpoint,Exception Breakpoint, ...

  6. jmeter 压测工具

    Apache jmeter 压力测试 java 环境安装 https://www.cnblogs.com/smyhvae/p/3788534.html 下载地址和文档 http://itopic.or ...

  7. UNP学习笔记(第二十五章 信号驱动式I/O)

    信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1. ...

  8. UNP学习笔记(第十一章 名字与地址转换)

    域名系统 域名系统(Domain Name System,DNS)主要用于主机名字与IP地址之间的映射. 主机名既可以是一个简单得名字,如solaris,也可以是一个全限定域名,如solaris.un ...

  9. Android BitmapFactory图片压缩处理(大位图二次採样压缩处理)

    Android实际开发中.在载入大量图片的时候.比方ViewPager.GridView.ListView中,载入了大量的比較大图片就easy出现OOM(内存溢出)的异常,这是由于一个应用的最大内存使 ...

  10. 一款炫酷Loading动画--载入成功

    简单介绍 昨天在简书上看到一篇文章.介绍了一个载入动画的实现过程 一款Loading动画的实现思路(一) 仅仅可惜原动画是IOS上制作的.而看了一下.作者的实现思路比較复杂,于是趁着空暇写了一个And ...