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