欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python網(wǎng)絡(luò)通訊之TCP協(xié)議實(shí)現(xiàn)服務(wù)器和客戶端實(shí)例

 更新時(shí)間:2023年08月08日 09:53:37   作者:灰勒塔德  
這篇文章主要介紹了Python網(wǎng)絡(luò)通訊之TCP協(xié)議實(shí)現(xiàn)服務(wù)器和客戶端實(shí)例, socket編程一種獨(dú)立于協(xié)議的網(wǎng)絡(luò)編程接口,應(yīng)用程序可以通過(guò)它發(fā)送或接收數(shù)據(jù),可對(duì)其進(jìn)行像對(duì)文件一樣的打開(kāi)、讀寫(xiě)和關(guān)閉等操作,需要的朋友可以參考下

前言:

上一期我們初步學(xué)習(xí)了解了網(wǎng)絡(luò)通訊的概念(網(wǎng)絡(luò)編程之網(wǎng)絡(luò)與通信介紹),那么這一期我們就接著學(xué)習(xí)通過(guò)網(wǎng)絡(luò)編程來(lái)實(shí)現(xiàn)服務(wù)器和客戶端之間的信息傳送。

Socket編程

1.簡(jiǎn)介

socket編程一種獨(dú)立于協(xié)議的網(wǎng)絡(luò)編程接口,應(yīng)用程序可以通過(guò)它發(fā)送或接收數(shù)據(jù),可對(duì)其進(jìn)行像對(duì)文件一樣的打開(kāi)、讀寫(xiě)和關(guān)閉等操作。

Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設(shè)計(jì)模式中,Socket其實(shí)就是一個(gè)門(mén)面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對(duì)用戶來(lái)說(shuō),一組簡(jiǎn)單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

2. Python中的socket

在Python當(dāng)中已有一個(gè)socket封裝好的模塊,當(dāng)我們想通過(guò)Python去實(shí)現(xiàn)socket編程的時(shí)候,只需要把這個(gè)模塊導(dǎo)入就行了,然后按照里面的方法就可以去搭建一個(gè)局域網(wǎng)的服務(wù)器和用戶端。

導(dǎo)入模塊

import socket

服務(wù)器的實(shí)現(xiàn)

每次當(dāng)我們?cè)谖⑿拧Q上發(fā)送一條信息的時(shí)候,我們發(fā)送的信息會(huì)通過(guò)局域網(wǎng)然后傳遞到公網(wǎng)上,再傳入到綁定公網(wǎng)的服務(wù)器當(dāng)中,然后服務(wù)器再通過(guò)網(wǎng)絡(luò)協(xié)議往下傳給接收者。網(wǎng)絡(luò)通訊大概就是這么一個(gè)過(guò)程,那這里我通過(guò)tcp協(xié)議來(lái)去實(shí)現(xiàn)局域網(wǎng)直接的服務(wù)器的代碼

import random
import socket
#1.創(chuàng)建服務(wù)器對(duì)象
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 參數(shù)1:socket.AF_INET, 表示 ipv4地址
# 參數(shù)2:socket.SOCK_STREAM表示 tcp協(xié)議封裝好的參數(shù)
#2.獲取當(dāng)前計(jì)算機(jī)地址的代碼
p=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
p.connect(('8.8.8.8',80))
nowip=p.getsockname()[0]
p.close()
port=8888
print('當(dāng)前的ip地址:',nowip)
print('當(dāng)前端口號(hào):',port)
#3.把服務(wù)器綁定到本計(jì)算機(jī)上
server.bind((nowip,port))
#4.設(shè)置監(jiān)聽(tīng)模式,設(shè)置最大的監(jiān)聽(tīng)數(shù)
server.listen(128) #設(shè)置最大的連接數(shù)128
print('服務(wù)端已啟動(dòng),等待連接……')
#5.等待客戶的連接
conn, addr = server.accept()
# conn 是連接客戶端的套接字對(duì)象
# addr 是表示客戶端的連接地址
while 1:
    try:
        #6.接受客戶端的數(shù)據(jù)
        #網(wǎng)絡(luò)數(shù)據(jù)都是以字節(jié)流的形式去發(fā)送的
        data=conn.recv(1024).decode('utf8') #參數(shù)1024表示每次接受最大的字節(jié)數(shù),decode進(jìn)行解碼,由字節(jié)流編碼轉(zhuǎn)換為字符
        if not data:#當(dāng)接受到空數(shù)據(jù)的時(shí)候就說(shuō)明客戶端斷開(kāi)了連接
            print(f'{addr}斷開(kāi)了連接')
            break
        print(f'----{addr}發(fā)送了----',data)
        #7.返回一個(gè)0~100的隨機(jī)數(shù)數(shù)據(jù)給客戶端
        conn.send(str(random.randint(0,100)).encode('utf8'))#進(jìn)行字節(jié)流編碼發(fā)送
    except ConnectionResetError:
        print('error')
        break
#7.關(guān)閉套接字對(duì)象
conn.close()
#8.關(guān)閉服務(wù)器
server.close()

用戶端的實(shí)現(xiàn)

客戶端的代碼實(shí)現(xiàn)也是跟服務(wù)器差不多的,實(shí)現(xiàn)要先去創(chuàng)建一個(gè)客戶端對(duì)象,然后連接到服務(wù)器的地址以及端口號(hào),然后就可以去實(shí)現(xiàn)與服務(wù)器進(jìn)行信息發(fā)送與接受了。代碼如下:

#客戶端
import socket
#1.創(chuàng)建客戶端對(duì)象
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.連接服務(wù)器地址和端口
client.connect(('10.33.110.204',8888))
count=1 #計(jì)數(shù)
while 1:
    a=input(r'輸入你要發(fā)送的內(nèi)容(\q退出):').strip()
    if a==r'\q':
        break
    if not a: #當(dāng)發(fā)送的數(shù)據(jù)為空時(shí)就重新輸入
        print('發(fā)送的數(shù)據(jù)不能為空')
        continue
    #3.把數(shù)據(jù)發(fā)送給服務(wù)器    
    client.send(a.encode('utf8'))
    #4.獲取到服務(wù)器發(fā)送的數(shù)據(jù)
    data = client.recv(1024)  # receive
    if not data:
        break
    print(f'對(duì)方發(fā)送的消息--{count}--:',data.decode("utf8"))
    count+=1
#5.關(guān)閉客戶端
client.close()
 

(注意:以上的代碼功能是在局域網(wǎng)內(nèi)才能實(shí)現(xiàn)服務(wù)器和客戶端之間的信息發(fā)送與接受,如果兩臺(tái)設(shè)備連接不同的WiFi的話那就發(fā)送不了信息了)

到此這篇關(guān)于Python網(wǎng)絡(luò)通訊之TCP協(xié)議實(shí)現(xiàn)服務(wù)器和客戶端實(shí)例的文章就介紹到這了,更多相關(guān)PythonTCP協(xié)議實(shí)現(xiàn)服務(wù)器和客戶端內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例

    將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例

    今天小編就為大家分享一篇將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python實(shí)現(xiàn)OpenCV中文路徑圖片讀寫(xiě)的詳細(xì)指南

    Python實(shí)現(xiàn)OpenCV中文路徑圖片讀寫(xiě)的詳細(xì)指南

    在Python中使用OpenCV處理圖片時(shí),涉及讀取和保存圖片的操作,可能會(huì)遇到中文路徑的兼容性問(wèn)題,該指南的目的是展示如何正確處理帶有中文路徑的圖片,并使用OpenCV將圖片保存到指定的中文路徑,需要的朋友可以參考下
    2025-03-03
  • Django中的Signal代碼詳解

    Django中的Signal代碼詳解

    這篇文章主要介紹了Django中的Signal代碼詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • python實(shí)現(xiàn)AES加密和解密

    python實(shí)現(xiàn)AES加密和解密

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)AES加密和解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Python?中OS?module的使用詳解

    Python?中OS?module的使用詳解

    這篇文章主要介紹了Python?中OS?module的使用詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Python配置同花順全數(shù)據(jù)接口教程詳解

    Python配置同花順全數(shù)據(jù)接口教程詳解

    這篇文章主要為大家詳細(xì)介紹了Python配置同花順全數(shù)據(jù)接口的教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Python與MongoDB交互的代碼實(shí)現(xiàn)

    Python與MongoDB交互的代碼實(shí)現(xiàn)

    Python與MongoDB的交互通常通過(guò)pymongo庫(kù)來(lái)實(shí)現(xiàn),pymongo是一個(gè)官方的Python驅(qū)動(dòng)程序,用于與MongoDB數(shù)據(jù)庫(kù)進(jìn)行交互,以下是一個(gè)簡(jiǎn)單的示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-10-10
  • python中循環(huán)語(yǔ)句while用法實(shí)例

    python中循環(huán)語(yǔ)句while用法實(shí)例

    這篇文章主要介紹了python中循環(huán)語(yǔ)句while用法,實(shí)例分析了while語(yǔ)句的使用方法,需要的朋友可以參考下
    2015-05-05
  • python em算法的實(shí)現(xiàn)

    python em算法的實(shí)現(xiàn)

    這篇文章主要介紹了python em算法的實(shí)現(xiàn),幫助大家更好的理解機(jī)器學(xué)習(xí),感興趣的朋友可以了解下
    2020-10-10
  • Python?jiaba庫(kù)的使用詳解

    Python?jiaba庫(kù)的使用詳解

    這篇文章主要為大家介紹了Python jiaba庫(kù)的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助,希望能夠給你帶來(lái)幫助
    2021-11-11

最新評(píng)論