Python udp socket.recv от каких пакетов это получит? - PullRequest
0 голосов
/ 24 сентября 2018

Я только начал работать с udp на python и нашел следующий клиент для общения с сервером, на котором я пишу.Мой вопрос о вызове 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 голосов
/ 24 сентября 2018

socket.recvfrom реализовано в C здесь:

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

, если вы хотите точно знать, что он делает.

Чтобы ответить на другую частьВаш вопрос, UDP без установления соединения, поэтому нет необходимости в рукопожатии или регистрации.Он будет читать любые данные, которые вы отправляете на этот порт.

...