KryoNet или пишем сервера легко

в 10:30, , рубрики: java

Здравствуй читатель хабра, сегодня я тебе расскажу о такой полезной библиотеке как KryoNet. С помощью который вы сможете легко написать сервер

Где скачать KryoNet

KryoNet вы можете скачать её здесь
После того как вы скачали архив откройте его в любом архиваторе и направляйтесь в папку jars/production/onejar, там вы найдет наш KryoNet подключайте его к Eclipse и пользуйтесь.

Как создать простейший сервер

В этом примере я покажу как можно создать сервер который будет отправлять клиенту текущие время.

Пишем сервер

Так наш сервер будет состоять из двух файлов это ServerProgram — это у нас собственно файл для запуска сервер, и PacketMessage — через этот пакет мы будем отправлять клиенту текущее время.

Приступаем к написанию класса ServerProgram

import java.util.Date;

import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;


public class ServerProgram extends Listener {

	static Server server;
	static int udpPort = 27960, tcpPort = 27960; // Порт на котором будет работать наш сервер
	
	public static void main(String[] args) throws Exception {
		System.out.println("Создаем сервер");
		//Создаем сервер
		server = new Server();
		
		//Регистрируем пакет класс
		server.getKryo().register(PacketMessage.class);
		//Регистрируем порт
		server.bind(tcpPort, udpPort);
		
		//Запускаем сервер
		server.start();
		
		server.addListener(new ServerProgram());
		
	}
	
	//Используется когда клиент подключается к серверу
	public void connected(Connection c){
		System.out.println("На сервер подключился "+c.getRemoteAddressTCP().getHostString());
		//Создаем сообщения пакета.
		PacketMessage packetMessage = new PacketMessage();
		//Пишем текст который будем отправлять клиенту.
		packetMessage.message = "Сейчас время: "+new Date().getHours()+":"+new Date().getMinutes();
		
		//Отправляем текст
		c.sendTCP(packetMessage); // Так же можно отправить через UDP c.sendUDP(packetMessage);
	}
	
	//Используется когда клиент отправляет пакет серверу
	public void received(Connection c, Object p){}
	
	//Используется когда клиент покидает сервер.
	public void disconnected(Connection c){
		System.out.println("Клиент покинул сервер!");
	}
}

PacketMessage

public class PacketMessage {
String message;
}

Запускаем наш сервер
Получаем в консоли ответ

Создаем сервер

Пишем клиентскую часть

У нас с вами клиентская часть будет состоять так же из двух файлов это ClientProgram — с помощью которого мы будем запускать наш клиент, и PacketMessage — с помощью которого мы будем регистрировать наш пакет

Начинаем писать ClientProgram

import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;


public class ClientProgram extends Listener {


	static Client client;
	//IP сервера для подключения
	static String ip = "localhost";
	//Порт к которому мы будем подключатся
	static int tcpPort = 27960, udpPort = 27960;
	
	static boolean messageReceived = false;
	
	public static void main(String[] args) throws Exception {
		System.out.println("Подключаемся к серверу");
		//
		client = new Client();
		
		//Регистрируем пакет
		client.getKryo().register(PacketMessage.class);

		//Запускаем клиент
		client.start();
		//Клиент начинает подключатся к серверу
		
		//Клиент подключается к серверу
		client.connect(5000, ip, tcpPort, udpPort);
		
		client.addListener(new ClientProgram());
		
		System.out.println("Вы подключились к серверу! Клиент ждет получения пакета...n");
		
		while(!messageReceived){
			Thread.sleep(1000);
		}
		
		System.out.println("Клиент покидает сервер");
		System.exit(0);
	}
	

	public void received(Connection c, Object p){
		//Проверяем какой отправляется пакет 
		if(p instanceof PacketMessage){
			//Если мы получили PacketMessage .
			PacketMessage packet = (PacketMessage) p; 
			System.out.println("Ответ от сервера: "+packet.message);
			
			//Мы получили сообщение
			messageReceived = true;
		}
	}
}

А класс PacketMessage будет идентичен классу PacketMessage из серверной части.

	
	public class PacketMessage {
	String message;
	}

После запуска клиента мы получаем

Подключаемся к серверу
Вы подключились к серверу! Клиент ждет получения пакета...

Ответ от сервера: Сейчас время: 21:44
Клиент покидает сервер

Лог сервера

Создаем сервер
На сервер подключился 127.0.0.1
Клиент покинул сервер!

Автор: vadik777

Источник

Поделиться

* - обязательные к заполнению поля