emule中节点加入Kad网络过程(源代码详解)

eMule中的kad相关代码梳理 emule中的Kademlia代码总体描述 当emule中开始使用Kademlia网络后,便不再会有中心服务器失效这样的问题了,因为在这个网络中,没有中心服务器,或者说,所有的用户都是服务器,所有的用户也是客户端,从而完完全全得实现了P2P。接下来讲针对emule中的Kademlia网络进行分析,将会根据emule中实现Kademlia所使用的不同的类分别进行讲述。其中: CKademli 阅读详情

emule中节点加入Kad网络过程(源代码详解)

程序启动:

EmuleDlg.cpp中函数BOOL CemuleDlg::OnInitDialog(),此函数用于对话框的初始化,在这个函数里添加了定时器:VERIFY( (m_hTimer = ::SetTimer(NULL, NULL, 300, StartupTimer)) != NULL );

在这里添加了函数void CALLBACK CemuleDlg::StartupTimer(HWND /*hwnd*/, UINT /*uiMsg*/, UINT /*idEvent*/, DWORD /*dwTime*/),

case 2:

theApp.Kad_Dlg->status++;

if(!theApp.listensocket->StartListening())

ASSERT(0);

if(!theApp.clientudp->Create())

ASSERT(0);

theApp.Kad_Dlg->status++;

break;

在StartupTimer这个函数里,添加了一个ListenSocket的侦听端,并且在本地节点创建了一个CClientUDPSocket* clientudp;

然后程序启动。

顺便说一句,在CEmule类中定义了许多的类的实例,这都在今后使用到:

UploadBandwidthThrottler* uploadBandwidthThrottler;

CClientList* clientlist;

CClientUDPSocket* clientudp;

CListenSocket* listensocket;

CSharedFileList* sharedfiles;

CDownloadQueue* downloadqueue;

CUploadQueue* uploadqueue;

CServerList* serverlist;

LastCommonRouteFinder* lastCommonRouteFinder;

CServerConnect* serverconnect;

CIPFilter* ipfilter;

CClientCreditsList* clientcredits;

CSearchList* searchlist;

CKnownFileList* knownfiles;

CMMServer* mmserver;

AppState m_app_state; // defines application state for shutdown

CMutex hashing_mut;

CString m_strCurVersionLong;

CPeerCacheFinder* m_pPeerCache;

CFriendList* friendlist;

CFirewallOpener* m_pFirewallOpener;//hyper added

节点加入网络:

Emule连接Kad网络时,调用函数:Kademlia::CKademlia::Start(); Start()这个函数没有做什么实际意义上的事情,主要是new了几个类:

m_pInstance = new CKademlia();

m_pInstance->m_pPrefs = pPrefs;

m_pInstance->m_pUDPListener = NULL;

m_pInstance->m_pRoutingZone = NULL;

m_pInstance->m_pIndexed = new CIndexed();

m_pInstance->m_pRoutingZone = new CRoutingZone();

m_pInstance->m_pUDPListener = new CKademliaUDPListener();

并且更改了几个定时器的时间。

接着程序转入到routingzone.cpp中执行。

在上面那部分的Start ()函数体内部初始化了CRoutingZone这个类,这个类的构造函数CRoutingZone::CRoutingZone()体中调用函数 Init(NULL, 0, CUInt128((ULONG)0));来初始化根节点(应该就是本地节点)。

在void CRoutingZone::Init(CRoutingZone *pSuper_zone, int iLevel, const CUInt128 &uZone_index)函数体内部创建了一个新的m_pBin = new CRoutingBin();接着调用函数StartTime(),用来开始这个区域。在StartTime()函数内部添加事件CKademlia::AddEvent(this);

在调用完函数StartTime()函数后,从文件中读取以前保存的联系人。

在调用完函数Kademlia::CKademlia::Start();之后,Kademlia开始处理,转入函数Kademlia:: CKademlia::Process()开始执行,在函数void CKademlia::Process()中调用函数pZone->OnSmallTimer();即CRoutingZone中 OnSmallTimer().。

CRoutingZone中OnSmallTimer(),在此函数体内,当判断联系人为非空时,调用函数 CKademlia::GetUDPListener()->SendMyDetails_KADEMLIA2(KADEMLIA2_HELLO_REQ, pContact->GetIPAddress(), pContact->GetUDPPort());来发送本地节点的一些信息,其中函数的第一个参数是消息的类型, KADEMLIA2_HELLO_REQ表明是Kademlia 2.0网络的加入请求,相当于TCP/IP中的ACK,即表明这个消息是用来加入网络的。第二个参数是本地节点的IP,第三个节点是本地节点的端口。

接着转入KademliaUDPListener.cpp中函数void CKademliaUDPListener::SendMyDetails_KADEMLIA2(byte byOpcode, uint32 uIP, uint16 uUDPPort)运行,主要是调用函数SendPacket(byPacket, uLen, uIP, uUDPPort);,SendPacket(byPacket, uLen, uIP, uUDPPort);函数在KademliaUDPListener.cpp内部,此函数体内部调用函数theApp.clientudp-> SendPacket(pPacket, ntohl(uDestinationHost), uDestinationPort);来发送包。

ClientUDPSocket.cpp中函数theApp.clientudp->SendPacket(pPacket, ntohl(uDestinationHost), uDestinationPort);体内部将刚才的消息包(或者叫数据包)加入到controlpacket_queue的队尾, controlpacket_queue.AddTail(newpending); controlpacket_queue是一个链表,类型是CTypedPtrList<CPtrList, UDPPack*> controlpacket_queue;,是通过模板来实现的。接着继续调用函数theApp.uploadBandwidthThrottler- >QueueForSendingControlPacket(this);此时数据包在链表UploadBandwidthThrottler* uploadBandwidthThrottler;中排队。

类UploadBandwidthThrottler继承自CWinThread类,主要是作为线程来运行的。类在初始化,在构造函数中调用函数 UINT AFX_CDECL UploadBandwidthThrottler::RunProc(LPVOID pParam),这个函数调用uploadBandwidthThrottler->RunInternal();,RunInternal()函 数主要用来发送来自socket的数据包,函数体内调用两个函数:

SocketSentBytes socketSentBytes = socket->SendControlData(allowedDataRate > 0?(UINT)(bytesToSpend - spentBytes):1, minFragSize);

以及

SocketSentBytes socketSentBytes = socket->SendFileAndControlData(neededBytes, minFragSize);

其中的socket类型是ThrottledFileSocket*,在类ThrottledFileSocket中这两个函数被定义为虚函数,而 且在这个类内部没有具体实现,它们的实现在类CClientUDPSocket中,类CClientUDPSocket继承自CAsyncSocket以 及ThrottledControlSocket,如下代码:

class CClientUDPSocket : public CAsyncSocket, public ThrottledControlSocket // ZZ:UploadBandWithThrottler (UDP)。

socket->SendControlData(allowedDataRate > 0?(UINT)(bytesToSpend - spentBytes):1, minFragSize);

以及

SocketSentBytes socketSentBytes = socket->SendFileAndControlData(neededBytes, minFragSize);的实现体在ClientUDPSocket.cpp中424行:

SocketSentBytes CClientUDPSocket::SendControlData(uint32 maxNumberOfBytesToSend, uint32 /*minFragSize*/){ // ZZ:UploadBandWithThrottler (UDP)

在它们内部调用了函数SendTo,if (!SendTo(sendbuffer, cur_packet->packet->size+2, cur_packet->dwIP, cur_packet->nPort))(在ClientUDPSocket.cpp中440行)。这个函数是类CClientUDPSocket 的成员函数。int CClientUDPSocket::SendTo(char* lpBuf,int nBufLen,uint32 dwIP, uint16 nPort),在这个函数体内调用类CAsyncSocket的成员函数uint32 result = CAsyncSocket::SendTo(lpBuf,nBufLen,nPort,ipstr(dwIP));,类CAsyncSocket是MFC 的类库中的一个类。

至此,本地节点加入网络的请求就发送完毕。

下面讲述本地节点在接收到来自其他节点的回应后在本地采取的一些措施从而把自己加入到网络内。

当网络事件发生时(即本地网卡接收到数据包),“socket窗口”接收WM_SOCKET_NOTIFY消息,消息处理函数OnSocketNotify被调用,。“socket窗口”的定义和消息处理是MFC实现的,其中OnSocketNotify函数定义如下:

LRESULT CSocketWnd::OnSocketNotify(WPARAM wParam, LPARAM lParam)

{

CSocket::AuxQueueAdd(WM_SOCKET_NOTIFY, wParam, lParam);

CSocket::ProcessAuxQueue();

return 0L;

}

在CSocket::ProcessAuxQueue();函数中回调CAsyncSocket的成员函数DoCallBack,DoCallBack调用事件处理函数OnReceive。

int PASCAL CSocket::ProcessAuxQueue()

{

……………………//省略部分

if (pMsg->message == WM_SOCKET_NOTIFY)

{

CAsyncSocket::DoCallBack(pMsg->wParam, pMsg->lParam);

}

………………//省略部分

return nCount;

}

void PASCAL CAsyncSocket::DoCallBack(WPARAM wParam, LPARAM lParam)

{

……………………//省略部分

pSocket->OnReceive(nErrorCode);

/*pSocket类型是:CClientUDPSocket,因为类CClientUDPSocket继承了类 CAsyncSocket,而OnReceive在CAsyncSocket定义的虚函数,OnReceive在CClientUDPSocket中重新 做了实现,因此调用的时候会转到CClientUDPSocket中OnReceive执行。*/

}

void CClientUDPSocket::OnReceive(int nErrorCode)

{

……………………

case OP_KADEMLIAHEADER:

{

// theStats.AddDownDataOverheadKad(length);

if (length >= 2)

Kademlia::CKademlia::ProcessPacket(buffer, length, ntohl(sockAddr.sin_addr.S_un.S_addr), ntohs(sockAddr.sin_port));

else

throw CString(_T("Kad packet too short"));

break;

}

……………………

}

接着调用在kademlia.cpp中定义的函数ProcessPacket。

void CKademlia::ProcessPacket(const byte *pbyData, uint32 uLenData, uint32 uIP, uint16 uPort)

{

if( m_pInstance && m_pInstance->m_pUDPListener )

m_pInstance->m_pUDPListener->ProcessPacket( pbyData, uLenData, uIP, uPort);

}

转入KademliaUDPListener类中ProcessPacket函数运行。

void CKademliaUDPListener::ProcessPacket(const byte* pbyData, uint32 uLenData, uint32 uIP, uint16 uUDPPort)

{

//………………………………省略部分

switch (byOpcode)

{

………………………………//省略部分

case KADEMLIA_RES:

if (thePrefs.GetDebugClientKadUDPLevel() > 0)

DebugRecv("KADEMLIA_RES", uIP, uUDPPort);

Process_KADEMLIA_RES(pbyPacketData, uLenPacket, uIP, uUDPPort);

break;

………………………………//省略部分

}

}

转入函数Process_KADEMLIA_RES(pbyPacketData, uLenPacket, uIP, uUDPPort);执行:

void CKademliaUDPListener::Process_KADEMLIA_RES (const byte *pbyPacketData, uint32 uLenPacket, uint32 uIP, uint16 uUDPPort)

{

//……………………

if(CKademlia::GetPrefs()->GetRecheckIP())

{

FirewalledCheck(uIP, uUDPPort);

if (thePrefs.GetDebugClientKadUDPLevel() > 0)

DebugSend("KADEMLIA_HELLO_REQ", uIP, uUDPPort);

SendMyDetails(KADEMLIA_HELLO_REQ, uIP, uUDPPort);

}

if(::IsGoodIPPort(ntohl(uIPResult),uUDPPortResult))

{

pRoutingZone->Add(uIDResult, uIPResult, uUDPPortResult, uTCPPortResult, 0);

pResults->push_back(new CContact(uIDResult, uIPResult, uUDPPortResult, uTCPPortResult, uTarget, 0));

}

}

}

CSearchManager::ProcessResponse(uTarget, uIP, uUDPPort, pResults);

}

在这个函数体内部主要包括对4个函数的调用,分别是:

SendMyDetails(KADEMLIA_HELLO_REQ, uIP, uUDPPort);

pRoutingZone->Add(uIDResult, uIPResult, uUDPPortResult, uTCPPortResult, 0);

pResults->push_back(new CContact(uIDResult, uIPResult, uUDPPortResult, uTCPPortResult, uTarget, 0));

CSearchManager::ProcessResponse(uTarget, uIP, uUDPPort, pResults);

其中第一个函数是在判断自己在防火墙或者NAT之后重新发送本地节点信息的函数,包括重新得到的IP地址以及端口。

第二和第三个函数用来添加此节点作为联系人之一。

第三个函数是将此消息转入到CSearchManager中相应处理响应的函数进行处理。

void CSearchManager::ProcessResponse(const CUInt128 &uTarget, uint32 uFromIP, uint16 uFromPort, ContactList *plistResults)

{

pSearch->ProcessResponse(uFromIP, uFromPort, plistResults);// pSearch是 CSearch类的指针

}

进一步转入到pSearch->ProcessResponse(uFromIP, uFromPort, plistResults)中执行。

void CSearch::ProcessResponse(uint32 uFromIP, uint16 uFromPort, ContactList *plistResults)

{

// Not interested in responses for FIND_NODE.

// Once we get a results we stop the search.

// These contacts are added to contacts by UDPListener.

if (m_uType == NODE)

{

// Note we got an answer

m_uAnswers++;

// We clear the possible list to force the search to stop.

// We do this so the user has time to visually see the results.

m_mapPossible.clear();

delete plistResults;

// Update search on the GUI.

//IMPREVIEW theApp.emuledlg->kademliawnd->searchList->SearchRef(this);

return;

}

}

在这个函数内部我们将响应的节点数目增加一。

后面陆续接收到的消息处理流程与上述情形相似,只是对于不同的消息采取的响应以及动作并不相 
eMule 2026实操指南:ED2K协议与Kad网络高效配置 P2P下载技术是分布式系统中的基础范式,其核心在于去中心化发现、多源分块传输与抗单点故障能力。ED2K协议通过MD4分块校验和动态源调度,提供远超HTTP的断点续传确定性;Kad网络作为Kademlia DHT实现,赋予节点自主发现与自愈能力,摆脱对中心服务器的依赖。这类技术在科研数据归档、固件镜像分发、开源版本回溯等强可靠性场景中具备不可替代价值。本文聚焦2026年真实可用的eMule v0.51d环境,详解ED2K协议落地细节与Kad网络稳定初始化方法,覆盖Windows 11兼容配置、端口映射策略、磁 阅读详情

相关推荐

ED2K下载全攻略:从零开始用eMule搞定资源分享(2024最新版)

本文为2024年新手提供了一份详尽的ED2K网络下载与资源分享指南。文章从ED2K网络原理讲起,重点介绍了eMule客户端的安装配置、ED2K链接的获取与安全识别、下载状态管理,并提供了提升下载速度的优化技巧与安全防护建议,帮助读者高效、安全地使用这一经典P2P文件共享网络。

purple的博客 3431

emule电骡无法连网的原因和解决方法-更新服务器与kad节点

转载自 az13ds2 最终编辑 电驴之家 1 服务器无法连接 把以下引号内的字符复制 “http://upd.emule-security.org/server.met”注意千万不要使emule.org.cn提供的!【emule.org.cn是中国verycd制作的冒牌emule官方网站,有很多间谍服务器,强烈建议记住不要使用。】 然

1万+

veryCD与eMule的安装和使用指南

P2P(Peer-to-Peer)资源分享是一种分布式网络应用模式,其中每个节点既是客户端也是服务器。P2P允许直接在用户之间共享文件,而无需中央服务器。当一个节点请求文件时,它实际上是从其他节点的集合中下载,这样的设计减少了中心服务器的负载,并提高了资源访问的效率和可靠性。虽然eMule并不需要大量的计算资源,但是为了保证下载的速度和稳定性,还是有一定的硬件要求。安装easyMule-Setup.exe的计算机至少应有500MHz的处理器,以及至少256MB的RAM。

weixin_34520664的博客 1555

最新服务器节点,服务器emule必备知识(更新服务器列表与kad节点文件)

emule必备知识(更新服务器列表与kad节点文件)emule必备知识emule是通过ED2K网络和KAD网络寻找、连接其他emule客户端的所以服务器列表和KAD节点文件是emule的必需文件。有些新手由于下载官方原版emule压缩包或其他未集成这些必需文件的emule压缩包从而出现“连接不上ED2K与KAD”问题。所以学会下载更新服务器列表与KAD节点文件是使用emule的第一步以下方法...

weixin_39841709的博客 1万+

eMule-VeryCD-src.zip:深入理解eMule与P2P网络协议

eMule是一款流行的文件共享软件,其特点在于使用了P2P技术,允许用户直接与其他用户交换文件。eMule支持多源下载,这意味着用户可以从多个源头获取文件的片段,从而提高下载速度并提升文件的完整性。随着互联网的发展,eMule在早期网络通信和数据共享领域扮演了重要的角色,即便在今天,它依旧有着一批忠实用户群体。在P2P网络的发展历程中,Kad网络(Kademlia)作为分布式哈希表(Distributed Hash Table, DHT)的一种实现,诞生于早期P2P网络的演进需求之上。

weixin_30661119的博客 1130

eMule配置优化:高ID获取与Kad路由详解,解决电驴下载慢

P2P文件共享网络中,eMule作为经典客户端,依赖eDonkey服务器索引和Kad分布式路由表协作完成来源发现与数据传输。实际使用中,下载速度瓶颈往往源于NAT类型、端口连通性、路由表新鲜度等底层网络参数,而非软件本身。通过调整eMule配置,例如获取高ID、优化nodes.dat、合理设置带宽与连接数,可以显著提升大文件分发效率。本文剖析常见“自由版配置包”中各文件的实际作用,给出可复现的最小配置方案,并梳理防火墙映射、积分保留等高频踩坑点,为素材分发、离线下载等场景提供工程实践参考。

weixin_30536861的博客 221

emule中节点加入Kad网络过程(源代码详解)【对原文部分改进】

from: http://blog.youkuaiyun.com/chenbuaa/article/details/2301656 emule中节点加入Kad网络过程(源代码详解) 程序启动: EmuleDlg.cpp中函数BOOL CemuleDlg::OnInitDialog(),此函数用于对话框的初始化,在这个函数里添加了定时器:VERIFY( (m_hTimer = ::

云里雾里的专栏 2818

emule必备知识更新服务器列表与kad节点文件.docx

emule必备知识更新服务器列表与kad节点文件.docx

[转]Kademlia详解

前两天在网上看到世界知名的电骡服务器Razorback 2被查封、4人被拘禁的消息,深感当前做eMule / BitTorrent等P2P文件交换软件的不易。以分布式哈希表方式(DHT,Distributed Hash Table)来代替集中索引服务器可以说是目前可以预见到的为数不多的P2P软件发展趋势之一,比较典型的方案主要包括:CAN、CHORD、 Tapestry、Pastry、Kademl...

weixin_30840253的博客 338

决策大模型与生成式大模型有何不同?一文拆解技术框架与落地路径

大模型技术正从内容生成走向复杂场景的智能决策。与生成式大模型拟合概率分布不同,决策大模型以序列决策为核心,融合强化学习机制,在动态环境中感知反馈、持续修正行动路径。其技术框架涵盖语义理解、规划推理与闭环决策,并通过世界模型进行低成本仿真推演,显著提升供应链调度、物流排程等场景的应对效率。实际落地时需结合传统优化算法与人工兜底,构建“语义先导+数值寻优”的分层架构,才能平衡精度与稳定性。这篇内容拆解决策大模型的技术组成、落地路径与常见误区,为企业智能化转型提供可参考的实践框架。

weixin_29057163的博客 188

pikachu靶场: 暴力破解第四关(token防爆破)

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 同时将此 Token 返回给客户端。此外,Token 是有时效的,一段时间之后或下一次请求时用户需要重新验证。

X_shiguang的博客 1720

分布式存储基础之kad

在网上看到世界知名的电骡服务器Razorback 2被查封、4人被拘禁的消息,深感当前做eMule / BitTorrent等P2P文件交换软件的不易。以分布式哈希表方式(DHT,Distributed Hash Table)来代替集中索引服务器可以说是目前可以预见到的为数不多的P2P软件发展趋势之一,比较典型的方案主要包括:CAN、CHORD、 Tapestry、Pastry、Kademlia和...

跨链技术践行者 1万+

宝塔面板添加站点及运营商SSL免费证书的申请与使用

本文详细介绍在宝塔面板下如何正确添加站点、配置站点,及在运营商如何申请免费SSL证书,将其配置到宝塔站点里。 给你的网站加一把锁,教你免费SSL证书申请,配置到自己的网站中。 环境:Ubuntu server 18 工具:宝塔控制面板 平台:阿里云 Web服务器:Nginx 宝塔:https://www.bt.cn/ 阿里云:https://www.aliyun.com/ 腾讯云:https://cloud.tencent.com/ 要求: 1.宝塔控制面板搭建完毕。 2掌握域名解析的原理。 3.了解ht

贺兰山长老 5059

KAD emule

<br /><br /> <br /> <br />目录[隐藏]<br /> <br />    1.Kademlia的简称<br /> <br />       1. Kademlia 网路的详细解释<br />       2. Kademlia 两个明显的特点<br /> <br />    2.kad是否有高低ID之分<br />    3.KAD机制的原理:<br />    4.什么是eMule<br /> <br />    1.Kademlia的简称<br /> <br />       1

突飞猛进的专栏 2044

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 267

ORB-SLAM3编程实践指南

它基于特征点的立体视觉和视觉惯性里程计技术,能够在没有先验知识的情况下,从单目、双目或RGB-D摄像头的输入中实时构建稠密三维地图,并实现相机的定位。通过正确配置环境、准备数据集和运行ORB-SLAM3,您可以实现高效的视觉SLAM系统,并获取相机在三维空间中的位姿。其中,[path_to_vocabulary]是ORB-SLAM3的词汇文件路径,[path_to_settings]是相机参数配置文件路径,[path_to_sequence]是输入图像的路径。运行ORB-SLAM3。

ByteNinja的博客 551

节点服务器列表文件,服务器emule必备知识(更新服务器列表与kad节点文件)

emul e必备知识emul e是通过ED2K网络和KAD网络寻找、连接其他emul e客户端的所以服务器列表和KAD节点文件是emul e的必需文件。有些新手由于下载官方原版emule压缩包或其他未集成这些必需文件的emule压缩包从而出现“连接不上ED2K与KAD”问题。所以学会下载更新服务器列表与KAD节点文件是使用emu l e的第一步以下方法适用于官方原版emule、 Xtreme...

weixin_33216825的博客 3965

YOLOv11的流形学习压缩:局部线性嵌入(LLE)引导的特征降维,实现在CSP模块中嵌入流形结构保持约束

摘要 本文探讨了流形学习在YOLOv11目标检测模型中的应用,重点研究局部线性嵌入(LLE)方法对CSP模块的特征压缩优化。针对深度学习模型的高维特征冗余问题,LLE通过三个关键步骤实现非线性降维:寻找k近邻、计算重构权重和低维嵌入,相比传统PCA方法能更好地保持数据的局部结构。文章详细分析了LLE的数学原理和参数选择策略,并提出在YOLOv11的CSP模块中嵌入流形约束的创新设计。通过特征分割前、处理过程和融合阶段引入流形一致性损失函数,该方法能在降低特征维度的同时保持原始流形结构,从而提升模型的计算效率

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1380

【2025最新】eMule下载与安装全流程详解:从配置到提速的完整使用指南

eMule作为P2P共享领域的经典工具,凭借其稳定的分发机制和广泛的用户基础,依然是高效资源共享的首选。本文详细介绍了eMule的下载安装流程,包括系统准备、服务器配置、网络优化等关键步骤,并提供了常见问题的解决方案和进阶使用技巧。通过端口映射和Kad网络设置,用户可以显著提升下载速度。eMule的去中心化特性使其资源丰富且传输稳定,特别适合大文件下载和跨平台共享。文章还提供了官方安全下载链接,帮助用户快速掌握这款经典工具的使用方法。

2401_89926894的博客 3986

软考备考:《系统规划与管理师教程》(第2版)第2章——数字ZG与数智化发展

🔴数字化转型的定义:数字化转型是建立在数字化转换、数字化升级基础上,进一步触及组织核心业务,以新建一种业务模式为目标的高层次转型。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 960

【FF-A】第二章 Introduction

Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm® SMMU v3.2 架构[1]为安全流添加了对第2阶段翻译的支持,以补充在 Armv8.4 处理器状态下的安全 EL2 翻译制度。这些架构特性使得在安全状态下,彼此不信任的软件组件能够相互隔离。关于在安全状态下引入虚拟化扩展以及固件框架目标的更多理念可在名为《在安全世界使用虚拟化进行隔离》的白皮书[3]中找到。软件组件只能访问物理地址空间和系统资源的区域,例如 GIC 中对其正确运行必要的中断。

baron-周贺贺-代码改变世界ctw 528

eMule源代码解析 -1

eMule源代码解析 -12006-10-16 17:37 eMule的官方首页上写着:2002年05月13日 一个叫做 Merkur 的人,他不满意原始eDonkey2000客户端并且坚信他能够做的更好,所以他开始制作。他聚集了其它开发人员在他的周围,并且eMule工程就此诞

zhangshaohan的专栏 2746

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

In eMule and the Kad network, “distance“ meaning

In eMule and the Kad network, “distance” is not defined as the literal number of hops or jumps from one node to another. Instead, it is a mathematical metric used to measure how “close” two identifiers are to each other in the key space. This distance metr

fareast_mzh的博客 654

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

电驴 emule 源码分析 (1)

关于emule 主要就是 连接 kad网络部分, 搜索部分,共享部分,下载部分,还有就是IRC聊天部分。IRC聊天部分应该不是大多数人想知道的重点,核心部分 还是kad网络的构造 和 下载部分 的实现。 我看了下 搜索部分,大致的过程是以下酱紫。 希望有更多 学习emule源码的人 一起交流共享。

C++编程的专栏 4808

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Kademlia原理介绍
下一篇: Kademlia 协议原理简介
chenbuaa
博客等级 码龄25年 6粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值