udp listener从两个不同的源端口接收数据包?

时间:2017-03-11 18:56:36

标签: python sockets networking udp port

有些东西让我很困惑。

我要完成一项功课,先生只想要一个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做,我找不到任何解决方案?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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,则发送到该端口。