第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用套接字發(fā)回?cái)?shù)據(jù)時(shí)的代碼阻塞

使用套接字發(fā)回?cái)?shù)據(jù)時(shí)的代碼阻塞

尚方寶劍之說 2022-09-20 17:17:59
我目前正在嘗試將圖像從我的樹莓派發(fā)送到我的電腦,并使用套接字庫將某些內(nèi)容發(fā)送回PI。發(fā)送圖像的工作原理,如果我不發(fā)送一些東西。但是,如果我嘗試向PI發(fā)送響應(yīng),則兩個(gè)代碼似乎都卡住了。任何人都可以幫我這個(gè)嗎?這是我的服務(wù)器代碼:import socketserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(('192.168.137.1', 5005))server_socket.listen(5)import osos.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"                # om tekst van tensorflow import niet te laten zienimport tensorflow as tfimport cv2import matplotlib.pyplot as pltimport numpy as npmodel = tf.keras.models.load_model("C:/Users/antho/Bachelorproef/Models/(BLOK1&2&3)3-conv-128-nodes-2-dense-1585522274")print("model loaded")IMG_SIZE = 100while (1):    client_socket, address = server_socket.accept()    print("Connected to - ",address,"\n")    fp = open("C:/Users/antho/Bachelorproef/Socket_Tests/test.jpeg",'wb')    while True:        strng = client_socket.recv(512)        if not strng:            break        fp.write(strng)    fp.close()    print("Image received")    img = cv2.imread("C:/Users/antho/Bachelorproef/Socket_Tests/test.jpeg", cv2.IMREAD_GRAYSCALE)    img = cv2.resize(img, (IMG_SIZE , IMG_SIZE))    img = np.array(img).reshape(-1, IMG_SIZE, IMG_SIZE, 1)    prediction = model.predict(img)    print(np.argmax(prediction))    pred = str(np.argmax(prediction))    client_socket.sendall(bytes(pred, "utf-8"))    print("send pred")這是我的客戶端代碼:#!/usr/bin/python# TCP client exampleimport socket,osimport ioimport timeimport picamera# Create an in-memory streammy_stream = io.BytesIO()with picamera.PiCamera() as camera:    camera.start_preview()    # Camera warm-up time    time.sleep(0.2)    camera.capture(my_stream, format='jpeg')my_stream.seek(0)                       # stream terug op begin zettenclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(('192.168.137.1', 5005))size = 1024while(1):    strng = my_stream.readline(512)    # print(strng)    if not strng:        break    client_socket.send(strng)如果我注釋掉此代碼中的最后幾行,圖像將從我的計(jì)算機(jī)發(fā)送到目錄。有了它,它就會卡住。
查看完整描述

1 回答

?
臨摹微笑

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊

客戶端將圖像數(shù)據(jù)發(fā)送到服務(wù)器,但它不會執(zhí)行任何操作來通知服務(wù)器所有圖像數(shù)據(jù)都已發(fā)送。由于服務(wù)器不知道已收到完整的圖像,因此仍在等待更多數(shù)據(jù)到達(dá)。這意味著服務(wù)器永遠(yuǎn)不會到達(dá)調(diào)用,這意味著客戶端將永遠(yuǎn)等待永遠(yuǎn)不會到達(dá)的數(shù)據(jù),因?yàn)樗鼜奈幢话l(fā)送過。client_socket.recvclient_socket.sendallits client_socket.recv

當(dāng)你從客戶端中刪除和跟隨的行時(shí),它的工作原理是,因?yàn)檫@可以讓客戶端進(jìn)程到達(dá)程序的末尾并退出。當(dāng)客戶端退出時(shí),它將關(guān)閉,并斷開與服務(wù)器的連接。連接斷開會導(dǎo)致服務(wù)器返回,但沒有數(shù)據(jù),這會將服務(wù)器中斷循環(huán),并允許它繼續(xù)保存之前接收的數(shù)據(jù),然后處理圖像文件。client_socket.recvclient_socketclient_socket.recvwhile True

要修復(fù)此問題,請?jiān)诳蛻舳苏{(diào)用中執(zhí)行以下操作:

client_socket.shutdown(socket.SHUT_WR)

發(fā)送完所有圖像數(shù)據(jù)后。它可以在內(nèi)部循環(huán)之前,也可以在 旁邊,這無關(guān)緊要。breakwhile(1)my_stream.close

這將告訴服務(wù)器不會再有數(shù)據(jù)從客戶端到達(dá),但它仍然允許套接字沿服務(wù)器到客戶端方向傳輸數(shù)據(jù)。這將允許客戶端收集服務(wù)器的響應(yīng)。pred


查看完整回答
反對 回復(fù) 2022-09-20
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號