最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python socket發(fā)送TCP數據方式

 更新時間:2023年09月06日 09:21:22   作者:MXG_ZZU  
這篇文章主要介紹了python socket發(fā)送TCP數據方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

python socket發(fā)送TCP數據

用python寫socket發(fā)送 TCP的數據

import socket
import time

#客戶端發(fā)送500個包 創(chuàng)建socket、連接、發(fā)送、關閉

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#綁定端口,發(fā)送數據時會從綁定的端口發(fā)送,不會再生成隨機端口
#tcp_socket.bind(("*.*.*.*", 8001))
tcp_socket.connect(("127.0.0.1", 8000))
n = 0
while(n<500):
? ? send_data = str(n)
? ? tcp_socket.send(send_data.encode("utf-8"))
? ? time.sleep()
? ? n=n+1
tcp_socket.close()

#接收端接收500個包 創(chuàng)建socket、綁定端口、監(jiān)聽端口、接收連接請求、接收數據、關閉

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(("192.168.1.128(本機私網IP)", 8000))
tcp_socket.listen()
client_scoket,client_addr = tcp_socket.accept()
timestamps = []
n = 0
while(n<500):
? ? recv_data = client_scoket.recv(1024)
? ? print(recv_data.decode('utf-8'))
? ? timestamps.append(time.perf_counter()) ?# 記錄時間戳
? ? n = n+1
client_scoket.close()
tcp_socket.close()

Python Socket(TCP和UDP)

IP協(xié)議負責把數據從一臺計算機通過網絡發(fā)送到另一臺計算機。數據被分割為一塊一塊,然后通過IP包發(fā)送出去,IP包的特點是按塊發(fā)送,途徑多個路由,但是不保證可以到達,也不保證順序到達。

TCP協(xié)議建立在IP協(xié)議之上,負責在兩臺計算機之間建立可靠連接,保證數據包順序到達,建立連接,對每個IP包編號,確保順序收到,如果包丟了,就自動重發(fā)

TCP(比較可靠的傳輸)

TCP連接是可靠連接,如果傳輸比較重要,確保對方收到,可以用TCP。建立TCP連接時,主動發(fā)起連接的是客戶端(client),而被動響應連接的是服務器(server)。

下邊例子實現:客戶端向服務端發(fā)送數據,服務端接收此數據,進行計算,將該結果返回客戶端。

服務端

利用docker容器運行服務端

起容器時應該將容器的12312端口(該端口號為服務端程序中暴露的端口號)映射到主機的端口

使用鏡像test:v1啟動一個容器,在容器內執(zhí)行/bin/bash命令,將容器的12312端口映射到主機的12312端口,主機的目錄/data映射到容器的/data

docker run -it -p 12312:12312 -v /test:/test test:v1 /bin/bash

程序如下:

import socketimport numpy as npimport time s &#61; socket.socket(socket.AF_INET, socket.SOCK_STREAM)host &#61; &#39;0.0.0.0&#39;      # ip地址port &#61; 12313          # 端口號s.bind((host, port))s.listen(5)print(&#39;Waiting for connection...&#39;)sock, addr &#61; s.accept()print(&#39;Connection successful&#xff1a;&#39;, addr)sock.send(b&#39;Send data please&#39;)while True:    client_data &#61; sock.recv(400000)    time.sleep(1)    if not client_data:        break    get_data &#61; np.fromstring(client_data, np.float32)    get_data &#61; np.array(get_data).reshape(1,2,3,4)    print(get_data)    result &#61; get_data    cilent_result &#61; result.tostring()    sock.send(cilent_result)sock.close()print(&#39;Connection closed!&#39;)

上述程序是進行一次傳輸之后自動結束運行,如果服務端可循環(huán)接收數據,可手動控制停止,可用下述方法。

import socket
import numpy as np
import time 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '0.0.0.0'      # ip地址
port = 12313          # 端口號
s.bind((host, port))
s.listen(5)
print('Waiting for connection...')
sock, addr = s.accept()
print('Connection successful:', addr)
sock.send(b'Send data please')
while True:
    client_data = sock.recv(400000)
    time.sleep(1)
    if not client_data:
        break
    get_data = np.fromstring(client_data, np.float32)
    get_data = np.array(get_data).reshape(1,2,3,4)
    print(get_data)
    result = get_data
    cilent_result = result.tostring()
    sock.send(cilent_result)
sock.close()
print('Connection closed!')

客戶端

客戶端容器不用指定端口,正常起容器

程序如下:

import socket
import numpy as np 
data = np.ones((1,2, 3, 4),np.float32)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('123.123.0.1', 12313))   # 服務端IP地址, 該地址為服務端的IP地址
print(s.recv(1024).decode('utf-8'))  # 端口號,與服務端暴露的端口號一致
client_data = data.tostring()
s.send(client_data)
serve_result = s.recv(40000)
result = np.fromstring(serve_result, np.float32)
result = np.array(result).reshape(1,2,3,4)
print(result)
s.close()

UDP(不要求可靠到達傳輸)

UDP傳輸不需要建立連接,只需要知道對方的IP地址和端口號即可發(fā)送。但是對方能不能收到就不確定了。

當進行一個不要求可靠到達的數據傳輸,就可以使用UDP協(xié)議,該傳輸方式不可靠但是速度比較快。

以下程序UDP實現:服務端收到客戶端的信息,進行計算,將結果返回客戶端。客戶端退出,而服務端需要手動退出。(下述程序需在同一主機上用兩個終端運行)

服務端

程序如下:

import socket
import numpy as np
import time
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '127.0.0.1'
port = 9999
s.bind((host, port))
while True:
    data, addr = s.recvfrom(4000)
    if not data:
        break
    get_data = np.fromstring(data, np.float32)
    get_data = np.array(get_data).reshape(1,2,3,4)
    print(get_data)
    result = get_data
    client_result = result.tostring()
    s.sendto(client_result, addr)

客戶端

import socket
import numpy as np
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
host = '127.0.0.1'
port = 9999
data = np.ones((1,2, 3, 4),np.float32)
client_data = data.tostring()
s.sendto(client_data, (host, port))
serve_result, addr = s.recvfrom(40000)
result = np.fromstring(serve_result, np.float32)
result = np.array(result).reshape(1,2,3,4)
print(result)
s.close()

注:IP地址設置為0.0.0.0,并不是一個真實的IP地址,表示本地中所有的IPV4地址,監(jiān)聽0.0.0.0的端口,就是監(jiān)聽本機中所有的IP端口

IP地址設置為127.0.0.1,表示本機地址,如果綁定到這個地址,客戶端必須同時在本機運行才能連接,外部的計算機無法連接進來。一般會通過ping 127.0.0.1來測試某臺機器上的網絡設備是否正常。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python-OpenCV教程之圖像的位運算詳解

    Python-OpenCV教程之圖像的位運算詳解

    圖像的位運算是指對圖像的數值按照二進制值逐位進行取反、與、或、異或操作,本文就帶大家了解相關知識,需要的朋友可以參考下
    2021-06-06
  • python編程語言中pathlib模塊簡介及使用

    python編程語言中pathlib模塊簡介及使用

    pathlib模塊類似os模塊,包含了對創(chuàng)建和刪除目錄、讀寫文件、獲取文件所在目錄不同部分字段、判斷文件是否存在,是否為文件和文件夾、文件統(tǒng)計和匹配查找,這篇文章主要介紹了python編程語言中pathlib模塊簡介及使用,需要的朋友可以參考下
    2023-09-09
  • python基于?Web?實現?m3u8?視頻播放的實例

    python基于?Web?實現?m3u8?視頻播放的實例

    這篇文章主要介紹了python基于?Web?實現?m3u8?視頻播放的實例的相關資料,需要的朋友可以參考下
    2023-06-06
  • Pycharm連接遠程服務器并遠程調試的全過程

    Pycharm連接遠程服務器并遠程調試的全過程

    PyCharm 是 JetBrains 開發(fā)的一款 Python 跨平臺編輯器,下面這篇文章主要介紹了Pycharm連接遠程服務器并遠程調試的全過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2021-06-06
  • Python venv虛擬環(huán)境配置過程解析

    Python venv虛擬環(huán)境配置過程解析

    這篇文章主要介紹了Python venv虛擬環(huán)境配置過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 淺談Python中range與Numpy中arange的比較

    淺談Python中range與Numpy中arange的比較

    這篇文章主要介紹了淺談Python中range與Numpy中arange的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python中print和return的作用及區(qū)別解析

    Python中print和return的作用及區(qū)別解析

    print的作用是輸出數據到控制端,就是打印在你能看到的界面上。這篇文章給大家介紹Python中print和return的作用及區(qū)別解析,感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • python連接clickhouse數據庫的兩種方式小結

    python連接clickhouse數據庫的兩種方式小結

    這篇文章主要介紹了python連接clickhouse數據庫的兩種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python Pygame實戰(zhàn)之塔防游戲的實現

    Python Pygame實戰(zhàn)之塔防游戲的實現

    這篇文章主要介紹了如何利用Python中的Pygame模塊制作簡單的塔防小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-03-03
  • python學生信息管理系統(tǒng)

    python學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python學生信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

绥阳县| 察隅县| 铜鼓县| 江西省| 子长县| 大丰市| 青神县| 民勤县| 博湖县| 榆社县| 滦南县| 盐山县| 内丘县| 拉萨市| 阳山县| 阜宁县| 佛教| 陆川县| 商河县| 潜山县| 专栏| 黄陵县| 西平县| 邻水| 宜丰县| 轮台县| 昂仁县| 鲁山县| 尖扎县| 洪湖市| 本溪市| 宜都市| 女性| 太湖县| 永川市| 华宁县| 平塘县| 广平县| 连城县| 浪卡子县| 邮箱|