Python udp socket.recv将从哪个数据包接收?

时间:2018-09-24 04:44:30

标签: python sockets udp system-calls

我刚刚开始在python中使用udp,并想出了以下客户端来与正在编写的服务器进行来回交谈。我的问题是关于recvfrom呼叫。它会收到什么数据包?它会收到任何数据包,还是会发生一些注册,说我想要发送给我的东西的结果?我对较低级别的功能更感兴趣,例如正在执行什么系统调用。

#!/usr/bin/python3
# shell.py
#
# Usage:
#
#       ./shell.py <IP_ADDR> <PORT>


import sys
import socket

SERVER_IP = sys.argv[1]
SERVER_PORT = int(sys.argv[2])
MAX_MESSAGE_LEN = 4096

# set up the right socket type

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
target = (SERVER_IP, SERVER_PORT)

try:
    while True:
        data = input("> ")
        sent = sock.sendto(data.encode('utf-8'), target)

        data, server = sock.recvfrom(MAX_MESSAGE_LEN)

        print(repr(server))
        print("Got {}".format(data))
finally:
    print("Closing socket")
    sock.close()

1 个答案:

答案 0 :(得分:0)

socket.recvfrom在此处用C实现:

https://github.com/python/cpython/blob/master/Modules/socketmodule.c#L3525

如果您想确切地知道它在做什么。

要回答问题的另一部分,UDP是无连接的,因此不涉及握手或注册。它将读取您发送到该端口的所有数据。