【问题标题】:python udp listener not showing on process listening to portspython udp侦听器未显示在侦听端口的进程上
【发布时间】:2017-06-04 01:47:15
【问题描述】:

我有一个脚本可以在 8087 端口监听传入的 udp 数据包:

IP_ADDRESS = '0.0.0.0'
LISTEN_PORT = 8087

serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serverSock.bind((IP_ADDRESS, LISTEN_PORT))

while True:
        data, addr = serverSock.recvfrom(1024)

我运行脚本,如果我向它发送数据包,就可以获取数据。

当我执行sudo netstat -peant | grep ":8087 " 来查看正在侦听此端口的进程时,我没有任何结果。

例如,当我执行sudo netstat -peant | grep ":80 " 时,我确实会得到进程侦听此端口的结果。

这是为什么呢? udp 服务器代码有问题吗?它不应该在 8087 上听吗?

【问题讨论】:

    标签: python udp ip port python-sockets


    【解决方案1】:

    您的服务器侦听正确的端口,但需要正确的数据处理。 学习下面的代码,你会对此有一个很好的理解。

    from socket import *
    import string
    from time import ctime
    
    HOST = '127.0.0.1'
    PORT = 8087
    BUFSIZ = 1024
    ADDR = (HOST, PORT)
    ssock = socket(AF_INET, SOCK_STREAM)
    ssock.bind(ADDR)
    ssock.listen(5)
    try:
        while True:
            c = 1
            print 'Waiting for a connection...'
            csock, addr = ssock.accept()
            hostname, aliases, addresses = gethostbyaddr(addr[0])
            lip, lport = ssock.getsockname()
            print '''
    Connected ...
    Remote Host     : %s
    Remote host IP  : %s
    Remort Port     : %d
    Connected time  : %s
    
    Local IP        : %s
    Local Port      : %d \n''' % (hostname , addr[0], addr[1], ctime(), lip, lport)
            while True:
                data = csock.recv(BUFSIZ)
                if data == 'q':
                    break
                elif data == 'shut':
                    ssock.close()
                    break
                elif data == ' ':
                    csock.send('Server Responce: <> \n')
                    print 'srv responces: %d : <>' % c
                    c += 1
                else:
                    data1 = data.upper()
                    csock.send('Server Responce: %s \n' % data1)
                    print 'srv responces: %d : <%s>' % (c, data1)
                    c += 1
            csock.close()
    except:
        print 'Server socket closed !!!'
    

    【讨论】:

    • 感谢您的回答。但这与不监听端口的进程有什么关系?我需要我的 udp 服务器能够从“外部”获取数据,而不仅仅是来自本地主机。该端口未显示在侦听端口列表中。我认为数据处理与它有很大关系
    • 修改代码打印接收到的数据:while True: data, addr = serverSock.recvfrom(1024) print data,并发送一些数据到端口。它捕获。
    最近更新 更多