0

我对这个任务很迷茫。我们应该使用 kademlia 创建 3 个 python 文件。这两个文件是节点,然后第三个是一组查询 DHT 应用程序。我们还获得了一个 CSV 文件,我们必须将其导入并将数据发送到 DHT 网络。 任何帮助将不胜感激!!! 这是作业:

您首先需要创建一个初始起始节点(参见下面的代码)。这将在您的本地系统上的端口 8468 上启动。


# Modified from: https://kademlia.readthedocs.io/en/latest/intro.html

import logging
import asyncio

from kademlia.network import Server

handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)


loop = asyncio.get_event_loop()
loop.set_debug(True)

server = Server()
loop.run_until_complete(server.listen(8468))


try:
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    server.stop()
    loop.close()

接下来,您需要在端口 8469 上启动 DHT 应用程序的另一个本地节点(参见下面的代码)。



# Modified from: https://kademlia.readthedocs.io/en/latest/intro.html

import logging
import asyncio

from kademlia.network import Server

handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)

bootstrap_node = ("localhost", int("8468"))
loop = asyncio.get_event_loop()
loop.set_debug(True)

server = Server()
loop.run_until_complete(server.listen(8469))
loop.run_until_complete(server.bootstrap([bootstrap_node]))

try:
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    server.stop()
    loop.close()

最后,以下代码将允许您查询 DHT 应用程序并添加键/值对(见下文)。


# Modified from: https://kademlia.readthedocs.io/en/latest/querying.html

import logging
import asyncio

from kademlia.network import Server

handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)

async def run():
    server = Server()
    await server.listen(8470)
    bootstrap_node = ("localhost", int("8469"))
    await server.bootstrap([bootstrap_node])

    await server.set("myKey2", "myValue2")

    result = await server.get("myKey2")
    print("Get result:", result)
    server.stop()

asyncio.run(run())

现在您已经有了两个节点的代码以及设置和查询 DHT 应用程序的代码,使用 DHT_Data.csv 文件编写一个 Python 程序来导入 CSV 文件并将该数据发送到 DHT 网络。此外,编写一些代码来获取 DHT_Data.csv 文件中的键列表并查询 DHT 应用程序以显示您可以查询和返回值。

这是 CSV 文件的屏幕截图: DHT_Data.csv

以下是我的代码截图:

KademlaiDHTServer.py

kademliaDHTAdditionalNode.py

kademliaDHTSetandQuery.py

4

0 回答 0