JRakNet 是一个 Java 网络库,它实现了基于 UDP 的协议 RakNet。该库旨在用于 Minecraft 服务器和客户端,但仍然可以用于轻松为其他视频游戏创建游戏服务器和客户端。您还可以阅读 JavaDocs
协议信息 | 版本 |
---|---|
当前协议 | 10 |
支持的服务器协议 | 10 |
支持的客户端协议 | 10 |
如果您使用的是发布版本,请使用此依赖项:
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.3</ version >
</ dependency >
如果您想使用快照版本,请使用此存储库和依赖项:
< repository >
< id >codemc-repo</ id >
< url >https://repo.codemc.org/repository/maven-public/</ url >
</ repository >
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.4-SNAPSHOT</ version >
</ dependency >
在 JRakNet 中创建服务器非常简单,创建服务器所需的一切都可以在这里看到:
// Add loopback exemption for Minecraft
if (! UniversalWindowsProgram . MINECRAFT . setLoopbackExempt ( true )) {
System . err . println ( "Failed to add loopback exemption for Minecraft" );
}
// Create server
RakNetServer server = new RakNetServer ( 19132 , 10 );
server . setIdentifier ( new MinecraftIdentifier ( "JRakNet Example Server" , 354 , "1.11" , 0 , 10 ,
server . getGloballyUniqueId (), "New World" , "Survival" ));
// Add listener
server . addListener ( new RakNetServerListener () {
// Client connected
@ Override
public void onConnect ( RakNetServer server , InetSocketAddress address , ConnectionType connectionType ) {
System . out . println ( "Client from address " + address + " has connected to the server" );
}
// Client logged in
@ Override
public void onLogin ( RakNetServer server , RakNetClientPeer peer ) {
System . out . println ( "Client from address " + peer . getAddress () + " has logged in" );
}
// Client disconnected
@ Override
public void onDisconnect ( RakNetServer server , InetSocketAddress address , RakNetClientPeer peer , String reason ) {
System . out . println ( "Client from address " + address
+ " has disconnected from the server for reason " " + reason + " " " );
}
// Packet received
@ Override
public void handleMessage ( RakNetServer server , RakNetClientPeer peer , RakNetPacket packet , int channel ) {
System . out . println ( "Client from address " + peer . getAddress () + " sent packet with ID "
+ RakNet . toHexStringId ( packet ) + " on channel " + channel );
}
});
// Start server
server . start ();
这是一个简单的 RakNet 服务器,可以通过 Minecraft 进行测试,方法是转到应显示服务器的“朋友”选项卡。服务器弹出后,您应该能够单击它来触发连接和数据包挂钩。
在 Windows 10 上,默认情况下使用通用 Windows 程序框架的应用程序无法连接到与其在同一计算机上运行的服务器。只需创建一个UniversalWindowsProgram
对象,其中第一个也是唯一一个参数是您希望能够连接的应用程序的 ID,就可以禁用这个烦人的功能。一个例子是 Microsoft 的 Edge,即Microsoft.MicrosoftEdge_8wekyb3d8bbwe
。因此,为了启用环回豁免,只需这样做:
UniversalWindowsProgram microsoftEdge = new UniversalWindowsProgram ( "Microsoft.MicrosoftEdge_8wekyb3d8bbwe" );
if (! microsoftEdge . setLoopbackExempt ( true )) {
System . err . println ( "Failed to enable loopback exemption for Microsoft Edge" );
}
很简单,对吧?如果您在非 Windows 10 计算机上运行,请随意实施此操作。即使您的计算机不运行 Windows 10 或未安装 Windows PowerShell,此实施也是专门设计的。当然,如果您没有使用安装了 Windows PowerShell 的 Windows 10 计算机,则确实无法正确检查您的应用程序是否不受环回影响。不过,我确信如果需要的话,可以在使用 Windows 10 和 Windows PowerShell 的用户的帮助下解决这个问题。
在JRakNet 中创建客户端也非常容易。创建客户端所需的代码可以在这里看到:
// Create client
RakNetClient client = new RakNetClient ();
// Add listener
client . addListener ( new RakNetClientListener () {
// Connected to server
@ Override
public void onConnect ( RakNetClient client , InetSocketAddress address , ConnectionType connectionType ) {
System . out . println ( "Successfully connected to server with address " + address );
}
// Logged into server
@ Override
public void onLogin ( RakNetClient client , RakNetServerPeer peer ) {
System . out . println ( "Successfully logged into server" );
client . disconnect ();
}
// Disconnected from server
@ Override
public void onDisconnect ( RakNetClient client , InetSocketAddress address , RakNetServerPeer peer , String reason ) {
System . out . println ( "Successfully disconnected from server with address " + address + " for reason " " + reason + " " " );
}
});
// Connect to server
client . connect ( "sg.lbsg.net" , 19132 );
这是一个简单的 RakNet 客户端,尝试连接到主 LBSG 服务器。连接后,它会关闭连接。