python echo含义_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()

先運行服務器程序,再啟動客戶端程序,如下:

服務器:

58b66fbe3c9e67340f3e6e6d17610751.png

客戶端:

35db064a6fa6e02431c6aaaee40881aa.png

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 沒有變化。

效果如下:

服務器:

e432927306e4c44320e815830aca83f7.png

客戶端:

2f79c51fd7533340c839cde22ab8a28d.png

總結

通過上面的兩上小練習,所有類似Echo都應該可以完成了。可以在其基礎上進行擴充。比如實現一上HTTP服務器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值