繁体   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