【问题标题】:Python udp socket.recvfrom what packets will this receive?Python udp socket.recvfrom 这会收到什么数据包?
【发布时间】:2019-02-27 13:56:50
【问题描述】:

我刚开始在 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()

【问题讨论】:

    标签: python sockets udp system-calls


    【解决方案1】:

    socket.recvfrom 在这里用 C 实现:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2014-02-17
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      相关资源
      最近更新 更多