1. 程式人生 > >python網絡編程(轉)

python網絡編程(轉)

true target 通過 encode welcom 協議 消息 機器 接收

本文代碼轉自廖雪峰老師的python教程

網絡編程底層其實就是一個socket,代表兩臺機器之間的一個連接。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AF_INET指定使用IPv4協議,SOCK_STREAM指定使用面向流的TCP協議

提供服務的一方是服務端,服務端程序需要綁定(s.bind())一個端口,然後長期監聽(s.listen())這個端口,收到消息(s.accept())後給予相應反饋。

反饋消息是通過新啟動一個線程來實現的,這樣就可以實現對同時刻多個訪問的反饋。

tcp_server.py

import socket
import threading import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((*.*.*.*, 9999)) s.listen(5) print(Waiting for connection...) def tcplink(sock, addr): print(Accept new connection from %s:%s... % addr) sock.send(bWelcome!) while True: data = sock.recv(1024) time.sleep(
1) if not data or data.decode(utf-8) == exit: break sock.send((Hello, %s! % data.decode(utf-8)).encode(utf-8)) sock.close() print(Connection from %s:%s closed. % addr) while True: # 接受一個新連接: sock, addr = s.accept() # 創建新線程來處理TCP連接: t = threading.Thread(target=tcplink, args=(sock, addr)) t.start()

發送消息的一方是客戶端,客戶端同樣要建立一個socket,嘗試對服務端進行連接(s.connect(),需要知道服務端的ip和端口);

建立連接之後,發送消息(s.send()),同時也可以從服務端獲取消息(s.recv());

完成任務後將連接進行關閉。

tcp_client.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立連接:
s.connect((*.*.*.*, 9999))
# 接收歡迎消息:
print(s.recv(1024).decode(utf-8))
for data in [bMichael, bTracy, bSarah]:
    # 發送數據:
    s.send(data)
    print(s.recv(1024).decode(utf-8))
s.send(bexit)
s.close()

python網絡編程(轉)