国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七)

這篇具有很好參考價(jià)值的文章主要介紹了Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

??作者簡(jiǎn)介:大家好,我是愛敲代碼的小王,CSDN博客博主,Python小白
??系列專欄:python入門到實(shí)戰(zhàn)、Python爬蟲開發(fā)、Python辦公自動(dòng)化、Python數(shù)據(jù)分析、Python前后端開發(fā)
??如果文章知識(shí)點(diǎn)有錯(cuò)誤的地方,請(qǐng)指正!和大家一起學(xué)習(xí),一起進(jìn)步??
??如果感覺博主的文章還不錯(cuò)的話,請(qǐng)??三連支持??一下博主哦
??博主正在努力完成2023計(jì)劃中:以夢(mèng)為馬,揚(yáng)帆起航,2023追夢(mèng)人

?????? python入門到實(shí)戰(zhàn)專欄:從入門到實(shí)戰(zhàn)?

?????? Python爬蟲開發(fā)專欄:從入門到實(shí)戰(zhàn)

???????Python辦公自動(dòng)化專欄:從入門到實(shí)戰(zhàn)

?????? Python數(shù)據(jù)分析專欄:從入門到實(shí)戰(zhàn)

?????? Python前后端開發(fā)專欄:從入門到實(shí)戰(zhàn)

目錄

TCP建立連接的三次握手

?TCP斷開連接的四次揮手

?數(shù)據(jù)包與處理流程

?數(shù)據(jù)包處理流程

?套接字編程實(shí)戰(zhàn)

?UDP編程介紹

?UDP編程的實(shí)現(xiàn)

持續(xù)通信

TCP編程介紹

?TCP編程的實(shí)現(xiàn)

TCP雙向持續(xù)通信

?結(jié)合多線程實(shí)現(xiàn)TCP雙向傳送(自由聊天)


TCP建立連接的三次握手

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?TCP是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。 一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”才能建立起來,其中的過程非常復(fù)雜, 只簡(jiǎn)單的描述下這三次對(duì)話的簡(jiǎn)單過 程:

1)主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對(duì)話;

2)主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步 (同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包 :“可以,你什么時(shí)候 發(fā)?”,這是第二次對(duì)話;

3)主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā), 你接著吧!”, 這是第三次握手。 三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步, 經(jīng)過三次“對(duì)話” 之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?1、第一步,客戶端發(fā)送一個(gè)包含SYN即同步(Synchronize)標(biāo)志的TCP報(bào)文,SYN同步報(bào)文會(huì)指明客戶端使用的端口以及TCP連接的初始序號(hào)。

2、第二步,服務(wù)器在收到客戶端的SYN報(bào)文后,將返回一個(gè)SYN+ACK的報(bào)文,表示客戶端的請(qǐng)求被接受,同時(shí)TCP序號(hào)被加一,ACK即確認(rèn)(Acknowledgement)

3、第三步,客戶端也返回一個(gè)確認(rèn)報(bào)文ACK給服務(wù)器端,同樣TCP序列號(hào)被加一,到此一個(gè)TCP連接完成。然后才開始通信的第二步:數(shù)據(jù)處理。

這就是所說的TCP的三次握手(Three-way Handshake)。

?為什么TCP協(xié)議有三次握手,而UDP協(xié)議沒有?

??? 因?yàn)槿挝帐值哪康氖窃赾lient端和server端建立可靠的連接。保證雙方發(fā)送的數(shù)據(jù)對(duì)方都能接受到,這也是TCP協(xié)議的被稱為可靠的數(shù)據(jù)傳輸協(xié)議的原因。而UDP就不一樣,UDP不提供可靠的傳輸模式,發(fā)送端并不需要得到接收端的狀態(tài),因此 UDP協(xié)議就用不著使用三次握手。

?TCP斷開連接的四次揮手

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?TCP建立連接要進(jìn)行3次握手,而斷開連接要進(jìn)行4次:

第一次: 當(dāng)主機(jī)A完成數(shù)據(jù)傳輸后,將控制位FIN置1,提出停止TCP連接的請(qǐng)求 ;

第二次: 主機(jī)B收到FIN后對(duì)其作出響應(yīng),確認(rèn)這一方向上的TCP連接將關(guān)閉,將ACK置1;

第三次: 由B 端再提出反方向的關(guān)閉請(qǐng)求,將FIN置1 ;

第四次: 主機(jī)A對(duì)主機(jī)B的請(qǐng)求進(jìn)行確認(rèn),將ACK置1,雙方向的關(guān)閉結(jié)束.。

?由TCP的三次握手和四次斷開可以看出,TCP使用面向連接的通信方式, 大大提高了數(shù)據(jù)通信的可靠性,使發(fā)送數(shù)據(jù)端和接收端在數(shù)據(jù)正式傳輸前就有了交互, 為數(shù)據(jù)正式傳輸打下了可靠的基礎(chǔ)。

?數(shù)據(jù)包與處理流程

什么是數(shù)據(jù)包

通信傳輸中的數(shù)據(jù)單位,一般也稱“數(shù)據(jù)包”。在數(shù)據(jù)包中包括: 包、幀、數(shù)據(jù)包、段、消息。

網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包由兩部分組成:一部分是協(xié)議所要用到的首部,另一部分是上一層傳過來的數(shù)據(jù)。首部的結(jié)構(gòu)由協(xié)議的具體規(guī)范詳細(xì)定義。在數(shù)據(jù)包的首部,明確標(biāo)明了協(xié)議應(yīng)該如何讀取數(shù) 據(jù)。反過來說,看到首部,也就能夠了解該協(xié)議必要的信息以及所要處理的數(shù)據(jù)。包首部就像協(xié)議的臉。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?數(shù)據(jù)包處理流程

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?套接字編程實(shí)戰(zhàn)

socket編程介紹

TCP協(xié)議和UDP協(xié)議是傳輸層的兩種協(xié)議。Socket是傳輸層供給應(yīng)用層的編程接口,所以Socket編程就分為TCP編程和UDP編程兩類。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?Socket編程封裝了常見的TCP、UDP操作,可以實(shí)現(xiàn)非常方便的網(wǎng)絡(luò)編程。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?socket()函數(shù)介紹

在Python語(yǔ)言標(biāo)準(zhǔn)庫(kù)中,通過使用socket模塊提供的socket對(duì)象, 可以在計(jì)算機(jī)網(wǎng)絡(luò)中建立可以互相通信的服務(wù)器與客戶端。在服務(wù)器端需要建立一個(gè)socket對(duì)象,并等待客戶端的連接??蛻舳耸褂胹ocket對(duì)象與服務(wù)器端進(jìn)行連接,一旦連接成功,客戶端和服務(wù)器端就可以進(jìn)行通信了。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

???上圖中,我們可以看出socket通訊中,發(fā)送和接收數(shù)據(jù),都是通過操作系統(tǒng)控制網(wǎng)卡來進(jìn)行。因此,我們?cè)谑褂弥螅仨氷P(guān)閉socket。

?在Python 中,通常用一個(gè)Socket表示“打開了一個(gè)網(wǎng)絡(luò)連接”,語(yǔ)法格式如下:

socket.socket([family[, type[, proto]]])

family : 套接字家族可以使 AF_UNIX 或者 AF_INET ;

AF 表示ADDRESS FAMILY 地址族

AF_INET(又稱 PF_INET)是 IPv4 網(wǎng)絡(luò)協(xié)議的套接字類型;而 AF_UNIX 則是 Unix 系統(tǒng)本地通信

?type : 套接字類型可以根據(jù)是面向連接的還是非連接分為 SOCK_STREAM SOCK_DGRAM ; protocol : 一般不填,默認(rèn)為0。

Socket主要分為面向連接的Socket和無連接的Socket。 無連接Socket的主要協(xié)議是用戶數(shù)據(jù)報(bào)協(xié)議,也就是常說的UDP, UDP Socket的名字是 SOCK_DGRAM 。創(chuàng)建套接字UDP/IP套接字,可以 調(diào)用 socket.socket() 。示例代碼如下: udpSocket=socket.socket (AF_INET,SOCK_DGRAM)

?socket對(duì)象的內(nèi)置函數(shù)和屬性

在Python語(yǔ)言中socket對(duì)象中,提供如表所示的內(nèi)置函數(shù)。

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?UDP編程介紹

UDP協(xié)議時(shí),不需要建立連接,只需要知道對(duì)方的IP地址和端口 號(hào),就可以直接發(fā)數(shù)據(jù)包。但是,能不能到達(dá)就不知道了。雖然用 UDP傳輸數(shù)據(jù)不可靠,但它的優(yōu)點(diǎn)是和TCP比,速度快,對(duì)于不要求可靠到達(dá)的數(shù)據(jù),就可以使用UDP協(xié)議。

創(chuàng)建Socket時(shí), SOCK_DGRAM 指定了這個(gè)Socket的類型是UDP。綁定端口和TCP一樣,但是不需要調(diào)用 listen() 方法,而是直接接收來自任何客戶端的數(shù)據(jù)。 recvfrom() 方法返回?cái)?shù)據(jù)和客戶端的地址與端口,這樣,服務(wù)器收到數(shù)據(jù)后,直接調(diào)用 sendto() 就可以把數(shù)據(jù)用UDP發(fā)給客戶端。

?UDP編程的實(shí)現(xiàn)

【示例】UDP接收數(shù)據(jù)

#coding=utf-8
from socket import *
s = socket(AF_INET, SOCK_DGRAM) #創(chuàng)建套接字
#綁定接收信息端口
s.bind(('127.0.0.1', 8888))  #綁定一個(gè)端口,ip地址和端?號(hào)
print("等待接收數(shù)據(jù)!")
redata = s.recvfrom(1024)  #1024表示本次接收的最?字節(jié)數(shù)
print(redata)
print(f'收到遠(yuǎn)程信息:{redata[0].decode("gbk")}, from {redata[1]}')
s.close()

【示例】UDP發(fā)送數(shù)據(jù)

from socket import *
s = socket(AF_INET, SOCK_DGRAM) #創(chuàng)建套接字
addr = ('127.0.0.1', 8888) #準(zhǔn)備接收方地址
data = input("請(qǐng)輸入:")
#發(fā)送數(shù)據(jù)時(shí),python3需要將字符串轉(zhuǎn)成byte
s.sendto(data.encode('gbk'),addr) #默認(rèn)的網(wǎng)絡(luò)助手使用的編碼是gbk
s.close()

持續(xù)通信

【示例】UDP接收數(shù)據(jù)

#coding=utf-8
from socket import *
s = socket(AF_INET,SOCK_DGRAM)  #創(chuàng)建UDP類型的套接字
s.bind(("127.0.0.1",8888))  #綁定端口,ip可以不寫
print("等待接收數(shù)據(jù)!")
while True:
    recv_data = s.recvfrom(1024)    #1024表示本次接收的最大字節(jié)數(shù)
    recv_content = recv_data[0].decode('gbk')
    print(f"收到遠(yuǎn)程信息:{recv_content},from {recv_data[1]}")
    if recv_content == "88":
        print("結(jié)束聊天!")
        break
s.close()

【示例】UDP發(fā)送數(shù)據(jù)

#coding=utf-8
from socket import *
s = socket(AF_INET,SOCK_DGRAM)  #創(chuàng)建UDP類型的套接字
addr = ("127.0.0.1",8888)
while True:
    data = input("請(qǐng)輸入:")
    s.sendto(data.encode("gbk"),addr)
    if data == "88":
        print("結(jié)束聊天!")
        break
s.close()

結(jié)合多線程實(shí)現(xiàn)UDP雙向自由通信

UDP 不同于 TCP,不存在請(qǐng)求連接和受理過程,因此在某種意義上無法明確區(qū)分服務(wù)器端和客戶端,只是因?yàn)槠涮峁┓?wù)而稱為服務(wù)器端。

?如下服務(wù)端、客戶端代碼幾乎一模一樣,注意接收和發(fā)送端口對(duì)應(yīng),即可。

?【示例】UDP實(shí)現(xiàn)多線程服務(wù)端

#coding=utf-8
from socket import *
from threading import Thread
udp_socket=socket(AF_INET,SOCK_DGRAM)
#綁定接收信息端口
udp_socket.bind(('127.0.0.1',8989))
#不停接收
def recv_data():
    while True:
        redata = udp_socket.recvfrom(1024)
        print(f'收到信息: {redata[0].decode("gbk")}, from {redata[1]}')
#不停發(fā)送
def send_data():
    while True:
        data=input('輸入信息:')
        addr=('127.0.0.1',8080)
      
 udp_socket.sendto(data.encode('gbk'),addr)
if __name__=='__main__':
    # 創(chuàng)建兩個(gè)線程
    t1=Thread(target=send_data)
    t2=Thread(target=recv_data)
    t2.start()
    t1.start()
    t1.join()
    t2.join()

【示例】UDP實(shí)現(xiàn)多線程客戶端

#coding=utf-8
from socket import *
from threading import Thread
udp_socket=socket(AF_INET,SOCK_DGRAM)
#綁定接收信息端口
udp_socket.bind(('127.0.0.1',8080))
#不停接收
def recv_data():
    while True:
        redata = udp_socket.recvfrom(1024)
        print(f'收到信息: {redata[0].decode("gbk")}, from {redata[1]}')
#不停發(fā)送
def send_data():
    while True:
        data=input('輸入信息:')
        addr=('127.0.0.1',8989)
      
udp_socket.sendto(data.encode('gbk'),addr)
if __name__=='__main__':
    # 創(chuàng)建兩個(gè)線程
    t1=Thread(target=send_data)
    t2=Thread(target=recv_data)
    t2.start()
    t1.start()
    t1.join()
    t2.join()

TCP編程介紹

面向連接的Socket使用的協(xié)議是TCP協(xié)議。TCP的Socket名稱是 SOCK_STREAM 。創(chuàng)建套接字TCP套接字,可以調(diào)用 socket.socket() 。示例代碼如下:

tcpSocket=socket.socket(AF_INET,SOCK_STREAM)

Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七),python入門到實(shí)戰(zhàn),網(wǎng)絡(luò),Python,網(wǎng)絡(luò)協(xié)議,tcp/ip,進(jìn)程

?TCP編程的實(shí)現(xiàn)

在Python語(yǔ)言中創(chuàng)建Socket服務(wù)端程序,需要使用socket模塊中的 socket類。創(chuàng)建Socket服務(wù)器程序的步驟如下:

(1) 創(chuàng)建Socket對(duì)象。

(2) 綁定端口號(hào)。

(3) 監(jiān)聽端口號(hào)。

(4) 等待客戶端Socket的連接。

(5) 讀取客戶端發(fā)送過來的數(shù)據(jù)。

(6) 向客戶端發(fā)送數(shù)據(jù)。

(7) 關(guān)閉客戶端Socket連接。

(8) 關(guān)閉服務(wù)端Socket連接。

?【示例】TCP服務(wù)器端接收數(shù)據(jù)

#coding=utf-8
from socket import *
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(("", 8899))
server_socket.listen(5)
client_socket, client_info =
server_socket.accept()
#clientSocket 表示這個(gè)新的客戶端
#clientInfo 表示這個(gè)新的客戶端的ip以及port
recv_data = client_socket.recv(1024)
print(f"收到信息:{recv_data.decode('gbk')},來自:{client_info}")
client_socket.close()
server_socket.close()

【示例】TCP客戶端發(fā)送數(shù)據(jù)到服務(wù)端

#coding=utf-8
from socket import *
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(("127.0.0.1", 8899))
#注意:
# 1. tcp客戶端已經(jīng)鏈接好了服務(wù)器,所以在以后的數(shù)據(jù)發(fā)
送中,不需要填寫對(duì)方的ip和port----->打電話
# 2. udp在發(fā)送數(shù)據(jù)的時(shí)候,因?yàn)闆]有之前的鏈接,所以需
要在每次的發(fā)送中,都要填寫接收方的ip和port----->寫信 
client_socket.send("haha".encode("gbk"))
client_socket.close()

TCP雙向持續(xù)通信

【示例】TCP:雙向通信Socket之服務(wù)器端

#coding=utf-8
'''
雙向通信Socket之服務(wù)器端
       讀取客戶端發(fā)送的數(shù)據(jù),將內(nèi)容輸出到控制臺(tái)
       將控制臺(tái)輸入的信息發(fā)送給客戶器端
'''
#導(dǎo)入socket模塊
from socket import *
#創(chuàng)建Socket對(duì)象
tcp_server_socket=socket(AF_INET,SOCK_STREAM)
#綁定端口
tcp_server_socket.bind(('', 8888))
#監(jiān)聽客戶端的連接
tcp_server_socket.listen()
print("服務(wù)端已經(jīng)啟動(dòng),等待客戶端連接!")
#接收客戶端連接
tcp_client_socket,
host=tcp_server_socket.accept()
print("一個(gè)客戶端建立連接成功!")
while True:
    #讀取客戶端的消息
  
re_data=tcp_client_socket.recv(1024).decode('gbk')
    #將消息輸出到控制臺(tái)
    print('客戶端說:',re_data)
    if re_data=='end':
        break
    #獲取控制臺(tái)信息
    msg=input('>')
  
tcp_client_socket.send(msg.encode('gbk'))
tcp_client_socket.close()
tcp_server_socket.close()

【示例】TCP:雙向通信Socket之客戶端

#coding=utf-8
'''
雙向通信Socket之客戶端
       將控制臺(tái)輸入的信息發(fā)送給服務(wù)器端
       讀取服務(wù)器端的數(shù)據(jù),將內(nèi)容輸出到控制臺(tái)
'''
#導(dǎo)入socket模塊
from socket import *
#創(chuàng)建客戶端Socket對(duì)象
tcp_client_socket=socket(AF_INET,SOCK_STREAM)
#連接服務(wù)器端
tcp_client_socket.connect(('127.0.0.1',8888))
while True:
    msg=input('>')
    #向服務(wù)器發(fā)送數(shù)據(jù)
  
 tcp_client_socket.send(msg.encode('gbk'))
    if msg=='end':
        break
    #接收服務(wù)器端數(shù)據(jù)
    re_data=tcp_client_socket.recv(1024)
    print('服務(wù)器端說:',re_data.decode('gbk'))
tcp_client_socket.close()

首先運(yùn)行示例啟動(dòng)服務(wù)器端程序,然后運(yùn)行示例客戶端程序。執(zhí)行結(jié)果如下圖所示:

?結(jié)合多線程實(shí)現(xiàn)TCP雙向傳送(自由聊天)

【示例】TCP服務(wù)端結(jié)合多線程實(shí)現(xiàn)自由收發(fā)信息

#coding=utf-8
'''
雙向通信Socket之服務(wù)器端
       讀取客戶端發(fā)送的數(shù)據(jù),將內(nèi)容輸出到控制臺(tái)
       將控制臺(tái)輸入的信息發(fā)送給客戶器端
'''
#導(dǎo)入socket模塊
from socket import *
from threading import Thread
def recv_data():
    while True:
        # 讀取客戶端的消息
        re_data =
tcp_client_socket.recv(1024).decode('gbk')
        # 將消息輸出到控制臺(tái)
        print(f'客戶端說:{re_data}')
        if re_data == 'end':
            break
def send_data():
    while True:
        # 獲取控制臺(tái)信息
        msg = input('>')
      
tcp_client_socket.send(msg.encode('gbk'))
if __name__ == '__main__':
    # 創(chuàng)建Socket對(duì)象
    tcp_server_socket = socket(AF_INET,SOCK_STREAM)
    # 綁定端口
    tcp_server_socket.bind(('', 8888))
    # 監(jiān)聽客戶端的連接
    tcp_server_socket.listen()
    print("服務(wù)端已經(jīng)啟動(dòng),等待客戶端連接!")
    # 接收客戶端連接
    tcp_client_socket, host = tcp_server_socket.accept()
    print("一個(gè)客戶端建立連接成功!")
    t1 = Thread(target=recv_data)
    t2 = Thread(target=send_data)
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    tcp_client_socket.close()
    tcp_server_socket.close()

【示例】TCP客戶端結(jié)合多線程實(shí)現(xiàn)自由收發(fā)信息

#coding=utf-8
'''
雙向通信Socket之客戶端
       將控制臺(tái)輸入的信息發(fā)送給服務(wù)器端
       讀取服務(wù)器端的數(shù)據(jù),將內(nèi)容輸出到控制臺(tái)
'''
#導(dǎo)入socket模塊
from socket import *
from threading import Thread
def recv_data():
    while True:
        # 接收服務(wù)器端數(shù)據(jù)
        re_data = tcp_client_socket.recv(1024)
        print(f'\n服務(wù)器端說: {re_data.decode("gbk")}')
def send_data():
    while True:
        msg = input('>')
        # 向服務(wù)器發(fā)送數(shù)據(jù)
      tcp_client_socket.send(msg.encode('gbk'))
        if msg == 'end':
            break
if __name__ == '__main__':
    # 創(chuàng)建客戶端Socket對(duì)象
    tcp_client_socket = socket(AF_INET,SOCK_STREAM)
    # 連接服務(wù)器端
    tcp_client_socket.connect(('127.0.0.1',8888))
    t1 = Thread(target=recv_data)
    t2 = Thread(target=send_data)
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    tcp_client_socket.close()

關(guān)于http協(xié)議和服務(wù)器的授課順序說明

由于大家還沒有學(xué)習(xí)網(wǎng)頁(yè)內(nèi)容,考慮到更好的和實(shí)戰(zhàn)結(jié)合。 所以,在講服務(wù)器編程時(shí),詳細(xì)展開。文章來源地址http://www.zghlxwxcb.cn/news/detail-656077.html

到了這里,關(guān)于Python入門【TCP建立連接的三次握手、 TCP斷開連接的四次揮手、套接字編程實(shí)戰(zhàn)、 TCP編程的實(shí)現(xiàn)、TCP雙向持續(xù)通信】(二十七)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • TCP:三次握手 、四次揮手?jǐn)嚅_的過程

    TCP:三次握手 、四次揮手?jǐn)嚅_的過程

    還是大劍師蘭特 :曾是美國(guó)某知名大學(xué)計(jì)算機(jī)專業(yè)研究生,現(xiàn)為航空航海領(lǐng)域高級(jí)前端工程師;CSDN知名博主,GIS領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技術(shù)開發(fā),歡迎加底部微信(gis-dajianshi),一起交流。 No. 內(nèi)容鏈接 1 Openlayers 【入門教

    2024年03月28日
    瀏覽(20)
  • SNMP 計(jì)算機(jī)網(wǎng)絡(luò)管理 實(shí)驗(yàn)1(二) 練習(xí)與使用Wireshark抓取SNMP數(shù)據(jù)包抓包之 任務(wù)三分析并驗(yàn)證TCP三次握手建立連接時(shí)三次握手工作過程

    SNMP 計(jì)算機(jī)網(wǎng)絡(luò)管理 實(shí)驗(yàn)1(二) 練習(xí)與使用Wireshark抓取SNMP數(shù)據(jù)包抓包之 任務(wù)三分析并驗(yàn)證TCP三次握手建立連接時(shí)三次握手工作過程

    ????????????????(*^▽^*)歡迎光臨 ??????????????? ??write in front?? ??個(gè)人主頁(yè):陳丹宇jmu ??歡迎各位→點(diǎn)贊?? + 收藏?? + 留言??? ??聯(lián)系作者??by QQ:813942269?? ??致親愛的讀者:很高興你能看到我的文章,希望我的文章可以幫助到你,祝萬(wàn)事

    2024年02月12日
    瀏覽(36)
  • 網(wǎng)絡(luò)協(xié)議 TCP三次握手與四次斷開的詳細(xì)觀察

    1:PC1與PC2的連通性,2:pc1安裝Sniffer,pc2安裝IIs服務(wù)器。3:pc1訪問pc2的FTP,用Sniffer抓包分析三次握手與四次斷開的詳細(xì)過程 sniffer pro(sniffer抓包工具) V4.7.5 中文特別版(附注冊(cè)碼) 類型: 網(wǎng)絡(luò)輔助 大?。?37.7MB 語(yǔ)言: 簡(jiǎn)體中文 時(shí)間: 2014-03-06 查看詳情 1、此圖證明PC1與PC2已經(jīng)可

    2024年02月08日
    瀏覽(18)
  • TCP的三次握手

    TCP的三次握手

    ?????????TCP 是一種面向連接的單播協(xié)議,在發(fā)送數(shù)據(jù)前,通信雙方必須在彼此間建立一條連接。所謂的“連接”,其實(shí)是客戶端和服務(wù)器的內(nèi)存里保存的一份關(guān)于對(duì)方的信息,如 IP 地址、端口號(hào)等。 ????????TCP 可以看成是一種字節(jié)流, 它會(huì)處理 IP 層或以下的層的丟

    2024年02月03日
    瀏覽(19)
  • TCP的三次握手過程

    TCP的三次握手過程

    TCP 是面向連接的協(xié)議,所以使用 TCP 前必須先建立連接,而 建立連接是通過三次握手來進(jìn)行的 。三次握手的過程如下圖: 剛開始客戶端處于 closed 的狀態(tài),服務(wù)端處于 listen 狀態(tài) 。 第一次握手:客戶端給服務(wù)端發(fā)一個(gè) SYN 報(bào)文,客戶端會(huì)隨機(jī)初始化序號(hào)( client_isn )。此時(shí)

    2024年02月16日
    瀏覽(29)
  • 詳解TCP的三次握手

    詳解TCP的三次握手

    定義 TCP是一種面向連接(連接導(dǎo)向)的、可靠的基于字節(jié)流的傳輸層通信協(xié)議。TCP將用戶數(shù)據(jù)打包成報(bào)文段,發(fā)送后會(huì)啟動(dòng)一個(gè)定時(shí)器,然后另一端收到的數(shù)據(jù)進(jìn)行確認(rèn)、對(duì)失序的數(shù)據(jù)重新排序、丟棄重復(fù)數(shù)據(jù) 特點(diǎn) TCP是面向連接的傳輸控制層協(xié)議 每一條TCP連接只能有兩個(gè)端

    2024年02月05日
    瀏覽(14)
  • TCP的三次握手,四次揮手

    TCP的三次握手,四次揮手

    第一次握手:客戶端發(fā)送SYN報(bào)文,井發(fā)送seq為x序列號(hào)給服務(wù)端,等待服務(wù)端的確認(rèn) 第二次握手:服務(wù)端發(fā)送SYN+ACK報(bào)文,并發(fā)送seq為Y的序列號(hào),在確認(rèn)序列號(hào)為x+1 第三次握手:客戶端發(fā)送ACK報(bào)文,并發(fā)送seq序列號(hào)為z,在確認(rèn)序列號(hào)為y+1 第一次揮手:先由客戶端向服務(wù)器端發(fā)

    2024年01月18日
    瀏覽(18)
  • TCP的三次握手、四次揮手

    首先我們要知道建立連接的目的是什么,我們是為了可靠的傳輸數(shù)據(jù)。那既然是可靠的傳輸數(shù)據(jù),我們必須保證客戶端和服務(wù)端都能正常的發(fā)送和接收數(shù)據(jù),如果某一方不能正常的發(fā)送或者接收數(shù)據(jù),那整個(gè)數(shù)據(jù)的傳輸就不能成功,也就不可靠。 三次握手 1.第一次握手:第一

    2024年02月10日
    瀏覽(21)
  • TCP的三次握手和4次揮手

    TCP的三次握手和4次揮手

    最開始,人們考慮到將網(wǎng)絡(luò)信息的呼喚與回應(yīng)進(jìn)行規(guī)范,達(dá)成一種公認(rèn)的協(xié)議,就好像沒有交通規(guī)則的路口設(shè)定交通規(guī)則。 人們?cè)O(shè)計(jì)出完美的OSI協(xié)議,這個(gè)協(xié)議包含七個(gè)層次由下到上分別是: 物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會(huì)話層,表示層,應(yīng)用層。 大家都覺得很

    2024年03月21日
    瀏覽(30)
  • TCP的三次握手四次揮手

    TCP的三次握手四次揮手

    TCP的三次握手和四次揮手實(shí)質(zhì)就是TCP通信的連接和斷開。 三次握手:為了對(duì)每次發(fā)送的數(shù)據(jù)量進(jìn)行跟蹤與協(xié)商,確保數(shù)據(jù)段的發(fā)送和接收同步,根據(jù)所接收到的數(shù)據(jù)量而確認(rèn)數(shù)據(jù)發(fā)送、接收完畢后何時(shí)撤消聯(lián)系,并建立虛連接。 四次揮手:即終止TCP連接,就是指斷開一個(gè)T

    2024年02月11日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包