2014-11-18 4 views
2

Я пишу WebSocket связь с client и server конечных точек как в Java коде (с помощью кота 7.0.53 в качестве веб-сервера) Когда я отправить текстовое сообщение, используя session.getbasicremote.sendText(String) метод @Onmessage функция увольняется и все. Однако я хочу отправить двоичные данные между веб-сайтами, чтобы, таким образом, использовать session.getbasicremote.sendBinary(ByteBuffer). Код должен быть считано в пределах следующего метода,WebSocket @OnMessage никогда не стреляя для двоичных сообщений только текст

@OnMessage 
public void recieved(ByteBuffer byteBuffer) 
{ 
    System.out.println(byteBuffer); 
} 

Однако метод никогда не вызывается, когда посылается сообщение (я отлажена через оба удаленных отладочные и печати, чтобы убедиться, что двоичные данные направляются также да регулярный текст отправляется через этот метод, когда binary переключается на text). Кто-нибудь знает, почему этот метод никогда не вызывается, когда данные отправляются с другого конца websocket? Вот также код для части, где двоичные данные отправляются через websocket. Также методы @onError находятся в классах и никогда не называются.

public void SendMessage() throws IOException 
{ 
    for(int i = 0;i<MESSAGE_SIZE;i++) 
     message+='\0'; 
    for(int i = 0;i<ID_SIZE;i++) 
     id+='\0'; 
    ByteBuffer bbuf = ByteBuffer.allocate(1000); 
    bbuf.put(id.getBytes()); 
    bbuf.position(33); 
    bbuf.putInt(33,length); 
    bbuf.position(37); 
    bbuf.put(message.getBytes()); 
    for(Session session : sessionList) 
     session.getAsyncRemote().sendBinary(bbuf); 
    System.out.println("sent"); 
} 

ответ

1

Добавление метода ByteBuffer флип будет делать трюк код теперь будет выглядеть следующим образом,

public void SendMessage() throws IOException 
{ 
    for(int i = 0;i<MESSAGE_SIZE;i++) 
     message+='\0'; 
    for(int i = 0;i<ID_SIZE;i++) 
     id+='\0'; 
    ByteBuffer bbuf = ByteBuffer.allocate(1000); 
    bbuf.put(id.getBytes()); 
    bbuf.position(33); 
    bbuf.putInt(33,length); 
    bbuf.position(37); 
    bbuf.put(message.getBytes()); 
    bbuf.flip(); 
    for(Session session : sessionList) 
     session.getAsyncRemote().sendBinary(bbuf); 
    System.out.println("sent"); 
} 

Метод флип следующий в соответствии с документацией API, "the limit is set to the current position and then the position is set to zero. If the mark is defined then it is discarded. After a sequence of channel-read or put operations, invoke this method to prepare for a sequence of channel-write or relative get operations".

+0

Я отправляю arrayBuffer как 'var img = context.getImageData (0, 0, canvas.width, canvas.height); var binary = new Uint8Array (img.data.length); для (var i = 0; i

Смежные вопросы