Не могу я настроить передачу массивов
![Грустный :(](./images/smilies/icon_e_sad.gif)
Порылся в документации, как оказалось put не может передавать массивы(
В общем, подправил файл сервера, согласно документации, но при запуске в ВК ни сообщения про соединение, ни авторизации нет; хотя при компиляции про соединение сообщается и про провал авторизации, что вполне обычно. Прошу направить на путь истины:
Код: Выделить всё
// импортируем классы для работы с потокамиimport java.io.*;// импортируем классы для работы с сокетамиimport java.net.*;// импортируем классы для работы с буферами, потоками, получением байтов от значений и т.д.// т.е. new io - новый input output... именно тут класс ByteBufferimport java.nio.*;// импортируем Vector - массив автоматической длины...import java.util.Vector;// классы для работы JSONimport org.json.simple.*;import org.json.simple.parser.*; public class Server { // порт для работы сервера... public static final int PORT = 17030; // айди приложения... public static final long APP_ID = 4039028; // ключ приложения... public static final String APP_SECRET = "afgymaF4fWilS4RTpvKg"; // сокет для принятия соединений... private ServerSocket serverSocket; // массив клиентов... private Vector<Client> clients; // конструктор... public Server() throws Exception { try { // созданим вектор - массив автоматической длинны для клиентов... clients = new Vector<Client>(); // создадим серверный сокет... serverSocket = new ServerSocket(Server.PORT); // напишем что сервер запускается out("Server start..."); // ждем подключений бесконечно... while(true) { // ждем подключений... поток блокируется... Socket newClient = serverSocket.accept(); // мы получили подключение... теперь создадим класс Client // и запишем его в массив клиентов.. out("New client connected... Online: " + (clients.size()+1) ); clients.addElement( new Client(newClient, this) ); } } catch(Exception ex) { // если ошибка любая, то перед выходом закроем серверный сокет... if(serverSocket != null) serverSocket.close(); // покажем, что не удалось :( out("Error in start server :("); } } // функция рассылки сообщения всем... public void sendMessage(double Danni, long uid) throws Exception { // json с сообщением... JSONObject messageJSON = new JSONObject(); JSONArray ar = new JSONArray(); ar.add(Danni); messageJSON.put("DanniIgri", ar); // массив байт готового сообщения для рассылки... byte[] finalMessage = getMessageBytes(messageJSON); // разошлем сообщение... for(int i = 0; i < clients.size(); i++) { // берем из вектора клиент... Client client = (Client)clients.get(i); // если он не подключен - удалим... if(!client.isConnected()) { deleteClient(client); continue; } // если тут - все ок... отошлем... client.send(finalMessage, uid); } } // функция удаления из массива клиента... public void deleteClient(Client client) { // удалим... deleteReal(client); // скажем что отсоединился... out("Client disconnected... Online: " + clients.size()); } // функция удаления с сообщением... public void deleteClient(Client client, double Danni) { // удалим... deleteReal(client); // покажем сообщение... out("Client disconnected... Online: " + clients.size() + Danni); } // именно тут идет удаление... private void deleteReal(Client client) { // удалим из вектора... clients.remove(client); // и деактивируем... client.deactivate(); } // просто функция-оболочка для упрощения... public void out(String s) { System.out.println(s); } // функция получения байт сообщения... public byte[] getMessageBytes(JSONObject json) throws Exception { // определили массив байт для сохранения самого сообщения... // заносим сюда байты сообщения в кодировке utf-8 byte[] messageBytes = (json.toJSONString()).getBytes("UTF8"); // массив байт указывающий длину сообщения... // allocate(4) - взять 4 байта, поскольку int = 4 байта... // putInt(XXX) - добавить число - int // array() - получить массив байт в ответе... byte[] messageLength = ByteBuffer.allocate(4).putInt(messageBytes.length).array(); // собираем наконец, готовый массив... // массив байт готового сообщения... byte[] finalMessage = new byte[messageBytes.length + 4]; System.arraycopy(messageLength, 0, finalMessage, 0, 4); System.arraycopy(messageBytes, 0, finalMessage, 4, messageBytes.length); return finalMessage; } // функция удаления всех потоков с этим клиентом, кроме текущего(переданного)... // начало программы.... public static void main(String[] args) throws Exception { Server s = new Server(); }}