Python UDP 侦听器未显示在进程侦听端口上



我有一个脚本,它侦听端口 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 吗?

您的服务器侦听正确的端口,但需要适当的数据处理。研究下面的代码,您将对此有很好的理解。

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 !!!'

最新更新