Python网络编程--Echo服务
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服务器。
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。
版权声明:本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接,未经作者同意请不要删除此段声明,感谢您为保护知识产权做出的贡献。