Python網路程式設計 Echo服務

2022-02-11 08:40:55 字數 3003 閱讀 9403

學習網路程式設計必須要練習的三個小專案就是echo服務,chat服務和proxy服務。在接下來的幾篇文章會詳細介紹。

今天就來介紹echo服務,echo服務是最基本的服務。它的主要特點就是連線與連線之間沒有通訊。

根據官網上的例子,做簡單的修改。

echo_server.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""echo server program

"""import socket

host = ''

port = 50007

defmain

(): 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)

ifnot 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

defmain

(): s = socket.socket(socket.af_inet, socket.sock_stream)

s.connect((host, port))

while

true:

data = raw_input('> ')

ifnot data:

break

s.sendall(data)

data = s.recv(1024)

ifnot data:

break

print('{}'.format(data))

s.close()

if __name__ == '__main__':

main()

先執行伺服器程式,再啟動客戶端程式,如下:

伺服器:

客戶端:

要實現輸入與輸出不同,就需要解決輸入的內容,根據不同的輸入(指令)給出不同的應答。

下面我們實現以下幾個小功能:

- 輸入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

defmain

(): 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)

ifnot 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()

defget_date

():return time.ctime()

defget_os

():return os.name

defget_ls

(dire):

ifnot dire.strip():

dire = os.curdir

return

'\n'.join(os.listdir(dire.strip()))

if __name__ == '__main__':

main()

echo_client.py沒有變化。

效果如下:

伺服器:

客戶端:

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

TCP網路程式設計之echo回射程式

tcp網路程式設計有三個例子最值得學習研究,分別是echo chat proxy,都是長連線協議。接下來,把這幾個例子都實現。本節用乙個簡單的例子來講tcp客戶 伺服器程式框架,這也是echo的實現。程式的基本流程 客戶從標準輸入鍵入一行文字,並傳送給伺服器。伺服器接收到文字之後回射給客戶端。客戶端...

shell 程式設計之echo

echo it is a test echo itis a testecho it is a test read 命令從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給 shell 變數 bin sh read name echo name it is a test 以上 儲存為 test.sh,...

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...