2017-01-19 18 views
1

我有一个脚本,它会监听传入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吗?

回答

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

感谢您的回答。但是这个过程与不听港口有什么关系?我需要我的udp服务器能够从“外部”获取数据,而不仅仅是从本地主机获取数据。端口不在监听端口列表中显示..我不认为数据处理与它有很大关系 –

+0

修改打印接收数据的代码:'while True: data,addr = serverSock.recvfrom(1024) print数据“,并将一些数据发送到端口。它捕获。 – OzizLK