Показать сообщение отдельно
Старый 28.02.2012, 00:17   #143
Новичок
 
Регистрация: 12.02.2012
Сообщений: 27
Сказал Спасибо: 8
Имеет 0 спасибок в 0 сообщенях
ErgoZ пока неопределено
По умолчанию

В данный момент продвинулся до RequestAuthLogin... пытаюсь сформировать пакет... на сколько понимаю первые 128 байт это логин+пароль, потом нули, и это нужно будет ещё обработать ключём рса, который мы получаем из инита и дескрамблируем, после этого некодированные 14 байт логина и 16 байт пароля? И вопрос, нужно ли это блоуфишить, если да, то каким ключём, с инита? вроде в ггаус от сервера ключа небыло, или я ошибаюсь?

Добавлено через 14 минут
Тин, учитывая что это, по сути, моя первая софтина на яве, я сделал отдельный класс, в нём создал функцию коннекта, получения пакета и отправки.

Короче вот код, думаю ты сможешь понять:
JAVA Код:
import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.net.SocketTimeoutException; public class L2Socket {     static Socket la2_socket = new Socket();     static InetAddress AddrAsIAddr = null;         public static void connect(){         try {             AddrAsIAddr = InetAddress.getByName(Constants.hostname);        } catch (Exception e) {            System.err.println("Could not get IP-address");        };                try {            SocketAddress adr = new InetSocketAddress(AddrAsIAddr,Constants.port_ls);            System.out.println("Socket configured");            la2_socket.connect(adr, 3000);            System.out.println("Connected to "+AddrAsIAddr+":"+Constants.port_ls);        }        catch (SocketTimeoutException e) {          System.err.println(e);          }        catch (IOException e) {         System.err.println(e);          }        catch (Exception e) {          System.err.println(e+" | Could not establish socket!");        };     }         public static byte[] recivePKG(int size){          byte[] buf = new byte[size];          if(la2_socket.isConnected()) {              //System.out.println("la2_socket is Connected");           try {                 la2_socket.getInputStream().read(buf);             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             }          return buf;     }         public static void SendPKG(byte[] buf){         try {             la2_socket.getOutputStream().write(buf);         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }     public static void close(){         try {             la2_socket.close();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }         }
Потом после SendPKG я сразу запускаю recivePKG. Но это на этапе логин сервера. В геймсервере планирую сделать архитектуру, где будет что-то типа:

// Цикл до тех пор, пока есть поступающие сообщения
while (la2_socket.isConnected()) { //пока сокет подключен
//Отображаем полученное сообщение
System.out.println("Server: " + recivePKG(тут я придумаю расчёт размера));
}

Ну и внутри этого цикла сделать обработку по типу пакета, что мол если пакет типа Say или Say2 (не помню что за чат отвечает), то работать с пакетом, если нет то не обращать внимания.

Я понимаю что код нубский, не судите строго.

Последний раз редактировалось ErgoZ, 28.02.2012 в 00:17. Причина: Добавлено сообщение
ErgoZ вне форума   Ответить с цитированием