Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение к серверу и посылка команды 
V
    Опции темы
Anime
Дата 15.9.2011, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 88
Регистрация: 13.11.2006
Где: Киев

Репутация: нет
Всего: нет



Есть сервер написанный на каком то языке на С что-ли точно не знаю...

Соединяюсь я с ним с помощью SocketChannel
Код

package uvp;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

public class NewClass extends Thread {
    
    public static final String HOST = "";
    public static final int PORT = 1;
    public static final String ENCODING = "WINDOWS-1251";
    
    public static final String UVP_IDENT = "THISISME";
    
    public static final String CMD1 = "UVP100000008VERSION1";
    public static final String CMD2 = "UVP100000019ACTION";
    
    private SocketChannel socket;

    private Charset charset;
    private CharsetDecoder decoder;
    
    private ByteBuffer bufferRead;
    private ByteBuffer bufferWrite;
    
    public NewClass() {
        charset = Charset.forName(ENCODING);
        decoder = charset.newDecoder();
        bufferRead = ByteBuffer.allocateDirect(9054);
        bufferWrite = ByteBuffer.allocateDirect(1024);
    }
    
    public void connect() {    
        try {
            socket = SocketChannel.open();
            socket.connect(new InetSocketAddress(HOST, PORT));
           
            setCommand(CMD1);
            setCommand(CMD2.concat(UVP_IDENT));
            
            //if(socket.read(bufferRead) != -1) {  
            //    bufferRead.flip();
            //    String data = decoder.decode(bufferRead).toString();
            //    bufferRead.clear();
            //    System.out.println(data);
            //}
        } catch (UnknownHostException ex) {
            System.err.println(ex.getMessage());
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
    }
    
    public void disconnect() {
        try {
            socket.close();
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
    }
    
    public boolean isConnected() {
        try {
            return socket.isConnected();
        } catch(NullPointerException ex) {
            return false;
        }
    }
    
    public void setCommand(String cmd) {
        try {
            bufferWrite.clear();
            bufferWrite.put(cmd.getBytes());
            bufferWrite.flip();

            while(bufferWrite.hasRemaining()) {
                socket.write(bufferWrite);
            }
        } catch (IOException ex) {
            System.err.println(ex);
        }
    }
    
    public void sendMessage(String console, String reciver,String msg) {
        setCommand("UVP100000036STDMSG" + console + reciver + msg);
    }
    
    @Override
    public void run() {
        try {
            while(isConnected() && socket.read(bufferRead) != -1) {
                
                bufferRead.flip();
                String data = decoder.decode(bufferRead).toString();
                bufferRead.clear();
                
                System.out.println(data);
            }
        } catch (UnknownHostException ex) {
            System.err.println(ex.getMessage());
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
    }
    
}



Все работает нормально вроде бы сервер передает xml сообщения постоянно (задержка в 1 секунду)

Какие данные передает сервер:
Все команды осуществленными пользователя выводятся всем пользователям
Так же передаются в реальном режиме данные, по этим данным формируется таблица в ней постоянно меняются данные

Методам setCommand я посылаю ему команду тут все нормально доходит и приходит сообщение в консоль
А вот в методе sendMessage я через метод setCommand посылаю специальную команду эта команда не выводится в консоль а приходит на нее сообщение.

Так вот при этой отправке случается такое что сервер выдает сообщение вида:
error WMU_SERV: '0000036S' is not a valid integer value
или может вообще ничего не выдавать
или может выдать: socket send error 10035


Может я неправильно посылаю команды серверу?
При подключения я посылаю две команды это для того чтобы мне эти ответы приходили

или вообще у меня неправильно все написано ))) пытаюсь разобраться с сокетами )))
да и ещё документации по серверу нету и исходников от нево тоже нету есть клиент конечно для него тож как сервер написан на с наверно я незнаю просто пытаюсь джава клиент написать под сервер, а то чет старый клиент неудобный ваще ))))
PM   Вверх
Anime
Дата 15.9.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 88
Регистрация: 13.11.2006
Где: Киев

Репутация: нет
Всего: нет



нету идей почему сервак принимает неполную команду?) странно что он сначала примит два или 3 команды sendMessage а потом нехочет.
а обычные команды он нормально принимает но тока не эту -(

у меня уже исякли идеи) замучил я уже его наверно своими тестами )

Это сообщение отредактировал(а) Anime - 15.9.2011, 22:46
PM   Вверх
dobrolub
Дата 15.9.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 1
Всего: 16



Вероятна ошибка протокола. Сервер явно ожидает в буффере число (Int). Сервер не может распарсить то, что он получает и выдаёт ошибку. Возможно, что предыдущая комманда остаётся не до конца прочитанной; возможна ошибка в сервере. Если возможно, попробуй только эту комманду чтобы исключить такую вероятность...
PM   Вверх
Anime
Дата 15.9.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 88
Регистрация: 13.11.2006
Где: Киев

Репутация: нет
Всего: нет



да вроде старый клиент тоже самое посылает что и я ему шлю. я смотрел программой ip tools которая следит что передается и отправляется... или может есть ещё какие то инструменты есть дял того чтобы следит что от тебя уходит что приходит... хоть правильно записываю в сокет? или мож на селекторы переписатьБ если они ваще нужны на клиенте?
PM   Вверх
dobrolub
Дата 16.9.2011, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 1
Всего: 16



А. тоесть можно легко проверить с пом. ip tools соответствует ли протокол твоего клиента протоколу старого клиента.
PM   Вверх
Anime
Дата 16.9.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 88
Регистрация: 13.11.2006
Где: Киев

Репутация: нет
Всего: нет



ага -) Просто показывает что от тебя кому уходит так же можно фильтры на айпи добавлять чтоб тока их смотреть а не все подряд

наконецто я понил оказывается что там число от длины сообщения зависит 
например команда UVP100000008VERSION1

В VERSION1 = 8 чисел, а 100000000 показатель длины сообщения вот он так и формирует запрос  smile  smile  smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0915 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.