2017-01-19 12 views
1

У меня есть скрипт, который прослушивает входящие UDP пакетов на порт 8087:питона УДП слушатель не показывая на процесс прослушивания портов

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-сервер мог получать данные из «снаружи», а не только из localhost. порт не отображается в списке прослушивающих портов. Я полагаю, что обработка данных имеет много общего с ним. –

+0

изменить код для печати полученных данных: 'while True: data, addr = serverSock.recvfrom (1024) print data' и отправить некоторые данные в порт. он захватывает. – OzizLK