簡體   English   中英

python 套接字偵聽器未接收到數據

[英]python socket listener not receiving data

我正在編寫一個去中心化腳本來跟蹤運行該腳本的其他計算機的 IP,以探索去中心化。 此腳本隔離了問題。 該代碼由 2 個腳本組成,一個主程序將其 IP 發送到提供的 IP(如果提供的話),以及一個作為下標運行並偵聽數據並將數據管道傳輸回主程序的偵聽器程序。 主腳本似乎正在運行,數據通過網絡發送,但偵聽器沒有收到它。

這是主腳本

    import socket
    from subprocess import Popen, PIPE
    from time import sleep
    def getIP():
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        try:
            s.connect(('8.8.8.4', 1))
            IP = s.getsockname()[0]
        except Exception:
            IP = '127.0.0.1'
        finally:
            s.close()
        return IP
    def sendfyi(target, ownIP):
        toSend = 'fyi' + ':' + ownIP
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((target, 50000))
        s.send(toSend.encode())
        s.close()
        print('sent fyi')
    otherIPs = []
    ownIP = getIP()
    
    targetIP = input('enter ip or 0: ')
    if targetIP != '0':
        otherIPs.append(targetIP)
        sendfyi(targetIP, ownIP)
    
    listener = Popen(['python3', 'testlistener.py'], stdout=PIPE, stderr=PIPE)
    i = 0
    while i == 0:
        sleep(1)
        listenerPipe = listener.stdout.readline()
        print(listenerPipe)

這是子流程:

import socket
def getIP():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        # doesn't even have to be reachable
        s.connect(('8.8.8.4', 1))
        IP = s.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        s.close()
    return IP

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((getIP(), 50000))
i = 1
while i == 1:
    s.listen(1)
    conn, addr = s.accept()
    print('conected', flush=True)
    data = conn.recv(1024)
    print('data receved', flush=True)
    out = data.decode()
    print('data decoded', flush=True)
    print(out, flush=True)
    conn.close()

不正確的綁定語句

bind(('', 50000))

暫無
暫無

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

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