91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么使用socket通信傳輸數據

發布時間:2021-03-04 11:30:21 來源:億速云 閱讀:436 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關python怎么使用socket通信傳輸數據的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1.服務器

功能:計算客戶端傳輸過來的文件個數、文件總長度、字符串總次數、字符串總個數、數據總長度,并且總長度不大于max_len,否則服務器將斷開聯系

異常處理

import socket
server=socket.socket()
server.bind(("localhost",5555))
server.listen()
conn,address=server.accept()
 
file_number=0#文件個數
file_len=0#文件總字長
data_number=0#字符串個數
data_len=0#數據長度
recv_len=0#總字長
max_len=2000000
 
#文件處理方法
def file_deal(data,file_number):
    with open(str(file_number)+'.jpg','wb')as f:
        f.write(data)
    print("文件保存成功!")
 
 
while True:
    try:
        #傳輸數據超過max_len則斷開數據傳輸
        if recv_len>max_len:
            print("客戶端傳輸數據超過{}字節,服務器斷開連接".format(max_len))
            print("本次一共傳輸{}字節的數據那,其中字符串為{}字節,傳輸{}次,文件為有{}字節,傳輸{}次".format(recv_len, data_len, data_number, file_len, file_number))
            #conn.send("你已經超出傳輸范圍{},服務器斷開連接".format(max_len))
            break
        recv_data=conn.recv(1000)
        #recv處理層!
        #服務器和客戶端達成協議,客戶端向服務器端發來的指令:
        # 發送文件為2,發送數據為1,結束發送為4,繼續發送為3
        #send處理層:
        #回復1為收到,2為未收到!
        if recv_data.decode('utf-8')=='1':
            print("準備客戶端發送過來的字符串!")
            data_recv=conn.recv(1000)
            print("收到從客戶端發送過來的字符串:",data_recv.decode('utf-8'))
            data_number+=1#字符串總個數
            recv_len+=len(data_recv)#總字長
            data_len+=len(data_recv)#字符串總長
        elif recv_data.decode('utf-8')=='2':
            print("準備接受客戶端發送過來的文件")
            data_recv=conn.recv(100000000)
            file_deal(data_recv,file_number)
            file_number+=1#文件個數
            recv_len += len(data_recv)#總字長
            file_len+=len(data_recv)#文件總字長
        elif recv_data.decode('utf-8')=='3':
            print("客戶端重新發送數據")
            data_recv=conn.recv(10000)
            continue
        else:
            print("客戶端已斷開聯系!我也斷開聯系吧")
            data_recv=conn.recv(10000)
            print("本次一共傳輸{}字節的數據那,其中字符串為{}字節,傳輸{}次,文件為有{}字節,傳輸{}次".format(recv_len, data_len, data_number, file__len, file_number))
            break
    except:
        print("客戶端突然中斷")
        break
server.close()

2.客戶端

功能:向服務器端發送文件和字符串,并進行異常處理

import socket,os
 
def isfile(filename):
    result=os.path.exists(filename)
    return result
 
def readfile(filename):
    with open(filename,'rb')as f:
        data=f.read()
    return data
 
specialchar=['1','2','3','4']
client=socket.socket()
client.connect(('localhost',5555))
 
while True:
    try:
        #if client.recv(1000):
            #break
        data_send=input("請輸入您想發送的數據類型!1為字符串2為文件4為結束發送3為繼續發送:").strip()
        if data_send not in specialchar:
            continue
        client.send(data_send.encode('utf-8'))
        if data_send=='1':
            while True:
                data_send=input("請輸入您想發送的字符串:").strip()
                if data_send not in specialchar:
                    client.send(data_send.encode('utf-8'))
                    break
                else:
                    continue
        elif data_send=='2':
            while True:
                data_filename=input("請您輸入你想發送的文件名:").strip()
                if isfile(data_filename):
                    client.send(readfile(data_filename))
                    break
                else:
                    print("請重新輸入文件!")
                    continue
        elif data_send=='3':
            client.send('3'.encode('utf-8'))
            continue
        elif data_send=='4':
            client.send('4'.encode('utf-8'))
            break
        else:
            print("輸入錯誤!請重新輸入!")
            continue
    except:
        print("服務器端突然中斷!")
        break
 
client.close()

實現功能:實時傳輸數據(包括字符串、文件),客戶端文件的保存等。

3.socket通信優點

客戶端:

向服務器端發送文件和字符串,并進行異常處理

服務器端:

計算客戶端傳輸過來的文件個數、文件總長度、字符串總次數、字符串總個數、數據總長度,并且總長度不大于max_len,否則服務器將斷開聯系、異常處理。

感謝各位的閱讀!關于“python怎么使用socket通信傳輸數據”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

紫金县| 隆德县| 盐亭县| 光山县| 绿春县| 龙里县| 沂源县| 商都县| 塔河县| 乌拉特前旗| 徐水县| 萨嘎县| 边坝县| 麻栗坡县| 崇信县| 大埔县| 英吉沙县| 奎屯市| 宁远县| 囊谦县| 建昌县| 建平县| 慈溪市| 颍上县| 宜兴市| 揭西县| 虞城县| 武宁县| 丰县| 集贤县| 翁牛特旗| 苗栗市| 武隆县| 福清市| 托里县| 青岛市| 承德市| 毕节市| 长海县| 安顺市| 绥芬河市|