我刚刚开始在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()
答案 0 :(得分:0)
socket.recvfrom
在此处用C实现:
https://github.com/python/cpython/blob/master/Modules/socketmodule.c#L3525
如果您想确切地知道它在做什么。
要回答问题的另一部分,UDP是无连接的,因此不涉及握手或注册。它将读取您发送到该端口的所有数据。