JRakNet — это сетевая библиотека для Java, которая реализует протокол RakNet на основе UDP. Эта библиотека предназначалась для серверов и клиентов 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
, в котором первым и единственным параметром является идентификатор приложения, к которому вы хотите иметь возможность подключиться. Примером может служить 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 10 и установленным Windows PowerShell, на самом деле нет возможности правильно проверить, освобождено ли ваше приложение от обратной связи. Однако я уверен, что при необходимости эту проблему можно решить с помощью пользователя 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. Когда он подключен, он закрывает соединение.