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. 左手系,右手系,row major, column major

    http://www.cnblogs.com/minggoddess/p/3672863.html dx 左手系 row major ogl 右手系 column major 差了个 matrix   ...

  2. Linux下Reids的安装和使用

    简单记录一下 redis的官网:https://redis.io/ 官网介绍: Installation Download, extract and compile Redis with: $ wge ...

  3. 跟我学AngularJs:Controller数据共享、继承、通信使用具体解释

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主讲了AngularJs中的Controller中数据共享.继承.通信的具体使用 本 ...

  4. WikiCFP--A Wiki for Calls For Papers

    WikiCFP--A Wiki for Calls For Papers ---->www.wikicfp.com/cfp/

  5. linux下开启ftp的21号port

    1.先执行vsftpd服务: #service vsftpd start 2.通过iptables开放21号port (1) 先查看iptables设置: #iptables -nL Chain IN ...

  6. Linux进入单用户模式

    有时候配置linux的过程中,因为一些误操作导致系统初始化时堵塞或挂起而无法进入系统,原因往往是因为配置文件设置错误,部分文件被误删之类.遇到这种情况一般新手的做法就是重装(虚拟机不装白不装),但在实 ...

  7. 04 redis list结构及命令详解

    一:link 链表结构 lpush key value 作用: 把值插入到链接头部[右边] 注意:rpush key value 插入到左边 rpop key 作用: 返回并删除链表尾元素 rpush ...

  8. python从安装与使用pip到入门

    官方下载地址:https://www.python.org/downloads/ 下载后直接安装就可以了 再配一下环境变量, cmd运行python -V (注意,这里是大写的V) 打开python跑 ...

  9. 14、AppWidget及Launcher RemoteViews

    一.Launcher的简单研究 1 什么是Launcher Android系统启动后加载的第一个程序 . 这个程序是其他应用程序的入口 . Launcher构成: HomeScreen : (Work ...

  10. .net 平台下的AI框架

    Aforge.net之旅——开篇:从识别验证码开始 基于AForge.Net框架的扑克牌识别 人工神经网络入门(4) —— AFORGE.NET简介 .NET开源工程推荐(Accord,AForge, ...