JRakNet은 UDP 기반 프로토콜 RakNet을 구현하는 Java용 네트워킹 라이브러리입니다. 이 라이브러리는 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 ();
이것은 서버가 표시되는 "친구" 탭으로 이동하여 Minecraft를 통해 테스트할 수 있는 간단한 RakNet 서버입니다. 서버가 나타나면 이를 클릭하여 연결 및 패킷 후크를 트리거할 수 있어야 합니다.
Windows 10에서 기본적으로 유니버설 Windows 프로그램 프레임워크를 사용하는 애플리케이션은 동일한 시스템에서 실행되는 서버에 연결할 수 없습니다. 이 성가신 기능은 연결하려는 응용 프로그램의 ID인 첫 번째이자 유일한 매개 변수를 사용하여 UniversalWindowsProgram
개체를 생성함으로써 간단히 비활성화할 수 있습니다. 예를 들어 Microsoft.MicrosoftEdge_8wekyb3d8bbwe
인 Microsoft Edge가 있습니다. 따라서 루프백 면제를 활성화하려면 다음만 수행하면 됩니다.
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 PowerShell이 포함된 Windows 10 사용자의 도움으로 이 문제가 해결될 수 있다고 확신합니다.
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 );
이것은 기본 LBSG 서버에 연결을 시도하는 간단한 RakNet 클라이언트입니다. 연결되면 연결을 닫습니다.