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 แอปพลิเคชันที่ใช้เฟรมเวิร์ก Universal Windows Program เป็นค่าเริ่มต้นจะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ที่ทำงานบนเครื่องเดียวกันกับแอปพลิเคชันได้ คุณลักษณะที่น่ารำคาญนี้สามารถปิดใช้งานได้โดยเพียงแค่สร้างวัตถุ UniversalWindowsProgram
โดยมีพารามิเตอร์ตัวแรกและตัวเดียวที่เป็น ID ของแอปพลิเคชันที่คุณต้องการเชื่อมต่อ ตัวอย่างจะเป็น Microsoft's 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 หลัก เมื่อเชื่อมต่อแล้วจะเป็นการปิดการเชื่อมต่อ