JRakNet es una biblioteca de redes para Java que implementa el protocolo RakNet basado en UDP. Esta biblioteca estaba destinada a ser utilizada para servidores y clientes de Minecraft, pero aún puede usarse para crear servidores y clientes de juegos para otros videojuegos con facilidad. También puedes leer los JavaDocs
Información del protocolo | Versión |
---|---|
Protocolo actual | 10 |
Protocolo de servidor soportado | 10 |
Protocolo de cliente compatible | 10 |
Si está utilizando una versión de lanzamiento, utilice esta dependencia:
< dependency >
< groupId >com.whirvis</ groupId >
< artifactId >jraknet</ artifactId >
< version >2.12.3</ version >
</ dependency >
Si desea utilizar una versión instantánea, utilice este repositorio y dependencia:
< 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 >
Crear un servidor en JRakNet es extremadamente fácil, todo lo que se necesita para crear uno se puede ver aquí:
// 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 ();
Este es un servidor RakNet simple que se puede probar a través de Minecraft yendo a la pestaña "Amigos" donde debería aparecer el servidor. Una vez que aparece el servidor, debería poder hacer clic en él para activar la conexión y los enlaces de paquetes.
En Windows 10, las aplicaciones que utilizan el marco del Programa universal de Windows de forma predeterminada no pueden conectarse a servidores que se ejecutan en la misma máquina que ellas. Esta molesta característica se puede desactivar simplemente creando un objeto UniversalWindowsProgram
con el primer y único parámetro siendo el ID de la aplicación a la que desea conectarse. Un ejemplo sería Edge de Microsoft, que es Microsoft.MicrosoftEdge_8wekyb3d8bbwe
. Entonces, para habilitar la exención de bucle invertido, solo se necesitaría lo siguiente:
UniversalWindowsProgram microsoftEdge = new UniversalWindowsProgram ( "Microsoft.MicrosoftEdge_8wekyb3d8bbwe" );
if (! microsoftEdge . setLoopbackExempt ( true )) {
System . err . println ( "Failed to enable loopback exemption for Microsoft Edge" );
}
Sencillo, ¿verdad? Siéntase libre de implementar esto si está ejecutando en una máquina que no sea Windows 10. Esta implementación se realizó específicamente para funcionar incluso si su máquina no ejecuta Windows 10 o no tiene Windows PowerShell instalado. Por supuesto, si no está en una máquina con Windows 10 con Windows PowerShell instalado, realmente no hay forma de verificar correctamente si su aplicación está exenta de bucle invertido. Sin embargo, estoy seguro de que esto se puede solucionar con la ayuda de un usuario que tenga Windows 10 con Windows PowerShell si es necesario.
Crear un cliente en JRakNet también es muy sencillo. El código necesario para crear un cliente se puede ver aquí:
// 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 );
Este es un cliente RakNet simple que intenta conectarse al servidor LBSG principal. Cuando está conectado, cierra la conexión.