0

我正在尝试了解网络通信和套接字。这是我写的一些代码:

客户端代码:

from socket import *

sock = socket(AF_INET, SOCK_DGRAM)
sock.bind('127.0.0.1', 3000)
data, addr = sock.recvfrom(1024)
print "Received data '" + data + "' from address:", addr

服务器代码:

from socket import *
sock = socket(AF_INET, SOCK_DGRAM)
sock.sendto("HELLO WORLD", ('127.0.0.1', 3000))
sock.close()

客户端打印出:Received data 'HELLO WORLD!' from address: ('127.0.0.1', 60788) 据我了解,元组的第二个成员应该是端口。此外,如果我发送多条消息,则数字每次都会增加 1。为什么不是3000?

作为旁注,python API 是否需要 htons 和 htonl 函数?

4

2 回答 2

1

首先:您在这里编写的脚本通常分别被视为服务器和客户端,而不是客户端和服务器。这是因为服务器(第一个脚本)绑定到已知端口并等待连接,而客户端(第二个脚本)从随机端口连接到它并发送数据。

直接回答您的问题:

  • 由于您没有将客户端绑定到任何特定端口,因此它为每个套接字选择一个新的临时端口,并且这些端口正在按顺序使用。如果服务器将数据包发送回相同的主机和端口,客户端将接收到该数据包。

  • htonshtonl函数在 Python 中通常不是必需的。该socket模块为您处理字节序交换地址和端口号。

于 2013-07-05T22:19:27.800 回答
1

您看到的端口是发送数据端口,而不是发送数据的端口。如果您没有指定源端口,而您的“服务器”没有,系统会为套接字分配一个源端口。

于 2013-07-05T22:19:40.763 回答