今天看了一下關於python的TCP編程。
發現思路和其他語言(比如java)思路基本上差點兒相同。
先看client。基本過程例如以下:
- 第一步:創建一個socket
- 第二步:建立連接
- 第三步:發送數據
- 第四步:讀取從server發送過來的數據
- 第五步:關閉連接
- 第六步:對收到的數據進行處理
以下為python的TCP編程的client程序的一個小樣例。java中關於網絡編程的博文請看這里
#coding:utf-8
#TCP編程的client程序
#編寫client程序與其他語言(比如java)的思路差點兒相同。例如以下
#第一步:創建一個socket
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#第二步:建立連接,參數是一個tuple,以訪問新浪為例
s.connect(('www.sina.com.cn',80))#80port是Web服務的標准port
#第三步:發送數據
s.send(b'GET / HTTP/1.1\r\n Host:www.sina.com.cn\r\nConnection:close\n\r\n')
#第四步:接收數據
buffer=[]
while True:
d=s.recv(1024) #recv(max)方法。表示每次僅僅能讀取max個字節
if d:
buffer.append(d)
else:
break
date=b''.join(buffer)
#第五步:關閉連接
s.close()
#第六步:對接收到的數據進行處理
#因為接收到的數據包含http頭和網頁本身。因此將其分開
header,html=date.split(b'\r\n\r\n',1)
print(header.decode('utf-8'))
with open('sina.html','wb') as f:
f.write(html)
以下看server端的程序。思路例如以下
- 第一步:創建一個socket
- 第二步:綁定監聽的地址和port,方法bind()僅僅接收一個tuple
- 第三步:調用listen()方法開始監聽port,傳入的參數指定等待連接的最大數量
- 第四步:server程序通過一個永久循環來接收來自client。accept()會等待並返回一個client的連接
#python中的server端的程序,其用來測試的client程序為:tcpClient1.py
#coding:utf-8
import socket
import threading
def tcplink(sock,addr):
print('Accept new connection from %s:%s...'%addr)
sock.send(b'welcome')
while True:
date=sock.recv(1024)
if not date or date.decode('utf-8')=='exit':
break
print(date.decode('utf-8'))
sock.close()
print('Connection from %s:%s'%addr)
#第一步:創建一個socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#第二步:綁定監聽的地址和port,方法bind()僅僅接收一個tuple
s.bind(('127.0.0.1',9999))
#第三步:調用listen()方法開始監聽port。傳入的參數指定等待連接的最大數量
s.listen(10)
#第四步:server程序通過一個永久循環來接收來自client,accept()會等待並返回一個client的連接
while True:
sock,addr=s.accept()
#創建一個新線程來處理TCP鏈接
threading.Thread(target=tcplink,args=(sock,addr)).start()
測試上面的server端的程序。我們用一個簡單的client程序來測試。例如以下
#為tcpServerserver端寫一個測試的client程序
#coding:utf-8
import socket
#第一步:創建一個socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#第二步:建立連接
s.connect(('127.0.0.1',9999))
#第三步:發送數據
s.send(b'hello World!')
#第三步:接收數據
date=s.recv(1024)
print(date.decode('utf-8'))
剛好前幾天系統的學習了一下git版本號控制這個工具。於是,也就開始經營我的Github了,上面的代碼可在我的Github中下載,點擊這里就可以
參考地址例如以下:關於TCP編程的具體介紹http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e495f640612f4b08975398796939ec3c000