TCP網絡協議通信原理(客戶端和服務器端)


下面直接用代碼來說明TCP協議的基礎知識:

服務器端代碼塊:

from socket import *
from time import ctime
'''
指定主機地址、工作端口號、接收緩存的長度
服務器端的HOST為空,表示它可以使用任意可用的地址
'''
HOST=''
PORT=21263
BUFSIZ=1024
ADDR=(HOST,PORT)

#  創建套接字 ,把套接字綁定到服務器地址,開啟TCP監聽
tcpSvrSock=socket(AF_INET,SOCK_STREAM)
tcpSvrSock.bind(ADDR)
tcpSvrSock.listen(5)
while True:
    '''
    不斷等待接收客戶端的連接。我們通過accept()
    獲取到客戶端的tcpCliSock和addr,於是后續可以通過這個
    tcpCliSock專門處理該客戶端的事務(從而與其他請求的客戶端區分開來)
    '''
    tcpCliSock,addr=tcpSvrSock.accept()
    print('內容來自:',addr)
    # print('tcpCliSock:',tcpCliSock)
    while True:
        data=tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        # 不為空則把消息解析出來,添加時間戳
        data=data.decode('utf-8')
        print(data)
        data1=input('回復客戶端:')

        respMsg='[%s]%s'%(ctime(),data1)
        # 過重新編碼成ASCII字節后,通過send()發送回去給客戶端
        tcpCliSock.send(bytes(respMsg,'utf-8'))
    tcpCliSock.close()
tcpSvrSock.close()

客戶端代碼塊:

from socket import *
'''
 指定主機地址、工作端口號、接收緩存的長度
 這里的HOST為服務器端所在主機的地址,由於我是在本地進行通信測試的,
 所以地址設置為127.0.0.1(localhost)。在實際網絡通信的時候,根據
 具體的情況進行相應的修改。客戶端填寫的PORT必須與服務器填寫的PORT
 對應才能正常通信。
'''
HOST='127.0.0.1'
PORT=21263
BUFSIZ=1024
ADDR=(HOST,PORT)

#  創建套接字 ,主動調用並通過connect()連接到服務器。
tcpCliSock=socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
    data=input('>>>')
    if not data:
        break
    tcpCliSock.send(bytes(data,'utf-8'))
    if not data:
        break
    # 接收服務器返回的數據
    rscData=tcpCliSock.recv(BUFSIZ)
    print(rscData.decode('utf-8'))

tcpCliSock.close()

'''
如果我們想要將代碼改成相應的ipv6的形式,
我們只需要把HOST改成“::1”,sock_family改成AF_INET6即可。
'''

更多詳細內容可以參見:https://blog.csdn.net/sinat_36645384/article/details/79128137

更多端口協議見:https://www.cnblogs.com/taoke2016/p/9047981.html


免責聲明!

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



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