1. 程式人生 > >11 python socket網絡編程

11 python socket網絡編程

都是 append \n send int 同時 .cn sock 新浪

 1 #客戶端和服務端:
 2 大多數連接都是可靠的TCP連接。創建TCP連接時,
 3 主動發起連接的叫客戶端,
 4 被動響應連接的叫服務器。
 5 
 6 ##關於端口
 7 端口號小於1024的是Internet標準服務的端口,例如SMTP服務是25端口,FTP服務是21端口,等等
 8 端口號大於1024的,可以任意使用。
 9 客戶端要主動發起TCP連接,必須知道服務器的IP地址和端口號。
10 作為服務器,提供什麽樣的服務,端口號就必須固定下來。
11 
12 ##關於發送數據怎麽協調
13 TCP連接創建的是雙向通道,雙方都可以同時給對方發數據。
14 但是誰先發誰後發,怎麽協調,要根據具體的協議來決定。
15 例如,HTTP協議規定客戶端必須先發請求給服務器,服務器收到後才發數據給客戶端。 16 17 ---------------------客戶端---------------------------------- 18 19 # 導入socket庫: 20 import socket 21 22 # 創建一個socket: 23 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ##AF_INET指定使用IPv4協議,如果要用更先進的IPv6,就指定為AF_INET6。SOCK_STREAM指定使用面向流的TCP協議 24
# 建立連接: 25 s.connect((www.sina.com.cn, 80)) ##註意參數是一個tuple,包含地址和端口號。 26 # 發送數據: 27 s.send(bGET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n) ##建立TCP連接後,我們就可以向新浪服務器發送請求,要求返回首頁的內容: 28 29 30 # 接收數據: 31 buffer = [] 32 while True: 33 # 每次最多接收1k字節: 34 d = s.recv(1024) 35 if
d: 36 buffer.append(d) 37 else: 38 break 39 data = b‘‘.join(buffer) ##接收數據時,調用recv(max)方法,一次最多接收指定的字節數,因此,在一個while循環中反復接收,直到recv()返回空數據,表示接收完畢,退出循環。 40 41 42 # 關閉連接: 43 s.close() ##當我們接收完數據後,調用close()方法關閉Socket,這樣,一次完整的網絡通信就結束了 44 45 46 #接收到的數據包括HTTP頭和網頁本身,我們只需要把HTTP頭和網頁分離一下,把HTTP頭打印出來,網頁內容保存到文件 47 header, html = data.split(b\r\n\r\n, 1) 48 print(header.decode(utf-8)) 49 # 把接收的數據寫入文件: 50 with open(sina.html, wb) as f: 51 f.write(html) 52 53 ##最後,現在,只需要在瀏覽器中打開這個sina.html文件,就可以看到新浪的首頁了。 54 55 -------------------------服務端----------------------------------------

11 python socket網絡編程