1

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

4

1 回答 1

0

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

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 !!!'
于 2017-01-19T12:09:32.753 回答