python socket編程練習(TCP)

    python可以利用socket庫實現套接字編程。套接字編程通常分爲server端和client端,編程時一般是先server再client,這是最正常的邏輯,因爲功能是由server提供的,client必須根據server提供的規則來建立連接和發送消息。


server端的函數:

函數描述
s.bind(address)將套接字綁定到地址AF_INET,以元組(host,port)的形式表示地址.
s.listen(backlog)開始監聽TCP傳入連接。backlog指定在拒絕連接之前,操作系統可以掛起的最大連接數量。該值至少爲1,大部分應用程序設爲5就可以了。
s.accept()接受TCP連接並返回(conn,address,其中conn新的套接字對象,可以用來接收和發送數據。address是連接客戶端的地址。

服務器建立TCP連接的流程如下:

socket()創建套接字->

bind()綁定地址和端口->

listen()開始監聽連接請求->

accept()接受連接請求,並返回一個新的套接字用於處理後續操作->

recv()和send()對數據進行收發->

新套接字和舊套接字依次close()->end


代碼練習:

import socket

from time import ctime

HOST = ""

PORT = 10012

ADDR = (HOST,PORT)

BUFSIZE = 1024

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(ADDR)

s.listen(5)

while True:
    print "Waiting for connection..."
    conn,addr = s.accept()
    print "...connection from:",addr
    while True:
        data = conn.recv(BUFSIZE)
        if not data:
            break
        conn.send('[%s] %s'%(ctime(),data))
        print [ctime()],':',data
conn.close()
s.close()


客戶端函數:

函數描述
s.connect(address)連接到address處的套接字。一般address的格式爲元組(hostname,port),如果連接出錯,返回socket.error錯誤。
s.connect_ex(adddress)功能與connect(address)相同,但是成功返回0,失敗返回errno的值。

客戶端建立TCP連接的流程:

socket()創建套接字->

connection()請求建立連接->

recv()和send()對數據進行收發->

close()套接字斷開連接->end

注意,客戶端在建立連接後沒有返回新的套接字


代碼練習:

import socket
from time import ctime

HOST = 'localhost'
PORT = 10012
BUFSIZE = 1024
ADDR = (HOST,PORT)

tcpSock =socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpSock.connect(ADDR)

while True:
    data = raw_input(">")
    if not data:
        break
    tcpSock.send(data)
    
    data = tcpSock.recv(BUFSIZE)
    
    if not data:
        break
    
    print data
   
tcpSock.close()

演示截圖如下

客戶端輸入:

wKiom1UJjxCSQjnwAADCuuhd_xI045.jpg


服務器端:

wKioL1UJkDiRAsfGAADiDaFNcyw401.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章