2017-01-19 110 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