python中的TCP編程學習


今天看了一下關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM