2017-03-11 113 views
-1

有些事情讓我很困惑。udp監聽器從兩個不同的源端口接收數據包?

我有功課要做,先生只是想要一個sender_udp.py和listener_udp.py。

但他渴望的東西,我實在無法理解。

他說,

塊引用

udp_receiver.py應該監聽本地迴環(127.0.0.1)端口#5444,並打印出它接收到的端口上的消息。它應該打印出發件人地址和發件人端口號(如果可能的話)。該udp_sender.py應的端口號5566和您的姓氏發送到本地迴環(127.0.0.1)您的名字從端口5567

塊引用

我寫的發送者和接收者,但接收方根本沒有收到數據包。

這裏是接收器代碼:

import socket 
import sys 

# Create a UDP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

# Bind the socket to the port 
server_address = ('localhost', 5444) 
print(sys.stderr, 'starting up on %s port %s' % server_address) 
sock.bind(server_address) 


while True: 
    print(sys.stderr, '\nwaiting to receive message') 
    data, address = sock.recvfrom(4096) 

    print(sys.stderr, 'received %s bytes from %s' % (len(data), address)) 
    print(sys.stderr, data) 

和發送代碼

import socket 
import sys 

# Create a UDP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
messageName = 'aaaaa' 
messageSurname = 'bbbb' 

try: 

    # Send data 
    print(sys.stderr, 'sending "%s"' % messageName) 
    sent = sock.sendto(messageName.encode('utf-8'),('localhost', 5566)) 

    print(sys.stderr, 'sending "%s"' % messageSurname) 
    sent = sock.sendto(messageSurname.encode('utf-8'),('localhost', 5567)) 



finally: 
    print(sys.stderr, 'closing socket') 
    sock.close() 

其實,我知道這個代碼,它是不可能將數據包發送到5444,客戶端發送數據包不同的港口;在這些港口沒有聽衆。 我無法理解他這個問題是什麼意思,也許他要求我們不同的源端口分配給每個數據包?那麼,有沒有辦法與python做到這一點,我找不到任何解決方案?

任何幫助將不勝感激。

回答

0

你的代碼應該看起來像這樣:

接收機:

import socket 
import sys 

# Create a UDP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

# Bind the socket to the port 
server_address = ('localhost', 5444) 
sock.bind(server_address) 
print('starting up on %s port %s' % server_address) 

while True: 
    print('\nwaiting to receive message') 

    data, address = sock.recvfrom(4096) 
    print('received %s bytes from %s' % (len(data), address)) 
    print(data)`enter code here` 

發件人:

import socket 
import sys 

# Create a UDP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
messageName = 'aaaaa' 
messageSurname = 'bbbb' 

try: 
    # Send data 
    print('sending "%s"' % messageName) 
    sock.sendto(messageName.encode('utf-8'),('localhost', 5444)) 

    print('sending "%s"' % messageSurname) 
    sock.sendto(messageSurname.encode('utf-8'),('localhost', 5444)) 
finally: 
    print('closing socket') 
    sock.close() 

發送數據包時,發送給接收方的IP地址和端口確保。 因此,如果接收者正在偵聽端口5444,則發送到該端口。

相關問題