簡體   English   中英

如何通過 python 套接字程序將數據從一台計算機發送到同一 WiFi 網絡上的另一台設備?

[英]How to send the data from one computer to another device on the same WiFi network via python socket program?

客觀的

我通過套接字程序實時接收來自駕駛模擬器的數據。 這些數據是車輛 position 隨着時間的推移,可以在同樣運行駕駛模擬器的同一台計算機上的 shell 中打印出來。
我想將這些數據發送到位於同一 Wifi 網絡上的另一台設備(筆記本電腦),如下所示。 最后一部分是我無法弄清楚並需要幫助的部分。 我的嘗試解釋如下。

在此處輸入圖像描述

Socket程序從駕駛模擬器接收數據

下面是一個socket程序,從模擬器接收數據,然后打印出來:

import socket
import struct

UDP_IP = "127.0.0.1"
UDP_PORT = 4001

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    fields = struct.unpack_from('=ddd', data)
    print(fields[0],fields[1],fields[2])

Output

打印的數據在 shell 中顯示如下:

在此處輸入圖像描述

我試過的:

我了解我需要使用筆記本電腦的 IP 地址從駕駛模擬器計算機發送數據。 但是,我不確定在上面的代碼中在哪里指定。

根據我自己的理解,我創建了客戶端和服務器.py文件,然后將服務器文件放在駕駛模擬器計算機上,將客戶端文件放在筆記本電腦上。 然后運行server.py,然后運行client.py。 client.py 等待了幾秒鍾但超時。

客戶端.py

import socket

HOST = '137.207.13.91'  # The server's hostname or IP address  (changed to hide actual IP)
PORT = 9000        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(b'Hello, world')
    data = s.recv(1024)

print('Received', repr(data))

服務器.py

import socket

HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 9000        # Port to listen on (non-privileged ports are > 1023)

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

如何將數據發送到筆記本電腦?

你有兩個非常不同的概念。 您的第一個示例使用 UDP,您的第二個示例使用 TCP。

TCP 是點對點的。 客戶端必須知道服務器的地址才能建立連接。 連接后,任何一方都可以發送或接收,但您必須有地址才能開始。

UDP 不是這樣的。 UDP 服務器可以在不知道特定 IP 地址的情況下廣播(到 0.0.0.0)。 同一子網中的任何計算機都可以偵聽該端口並接收廣播。 這就是您的第一個示例所做的。 缺點是給定計算機上只有一個進程可以偵聽 UDP 端口。

所以,這取決於你需要什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM