Eu tenho um aplicativo vb.net que abre um soquete e escuta nele.
Preciso me comunicar por meio deste soquete com esse aplicativo usando um javascript em execução em um navegador. Isto é, eu preciso enviar alguns dados neste soquete para que o aplicativo que está ouvindo neste soquete possa pegar esses dados, fazer algumas coisas usando algumas chamadas remotas e obter mais alguns dados e colocá-los de volta no soquete que meu javascript precisa leia e imprima no navegador.
Eu tentei, socket.io, websockify, mas nenhum provou ser útil.
Daí a pergunta: o que estou tentando é mesmo possível? Existe uma maneira que um javascript rodando em um navegador pode se conectar a um socket tcp e enviar alguns dados e ouvir mais alguma resposta de dados no socket e imprimi-lo no navegador.
Se isso for possível, alguém pode me apontar na direção certa que me ajudaria a estabelecer a meta.
Respostas:
Quanto ao seu problema, atualmente você terá que depender de XHR ou websockets para isso.
Atualmente, nenhum navegador popular implementou qualquer api de sockets raw para javascript que permite criar e acessar sockets raw, mas um rascunho para a implementação de API de sockets raw em JavaScript está em andamento. Dê uma olhada nestes links:
http://www.w3.org/TR/raw-sockets/
https://developer.mozilla.org/en-US/docs/Web/API/TCPSocket
O Chrome agora tem suporte para soquetes TCP e UDP brutos em suas APIs 'experimentais'. Esses recursos estão disponíveis apenas para extensões e, embora documentados, estão ocultos por enquanto. Dito isso, alguns desenvolvedores já estão criando projetos interessantes usando-o, como este cliente de IRC .
Para acessar esta API, você precisará habilitar o sinalizador experimental no manifesto de sua extensão. Usar sockets é bastante simples, por exemplo:
fonte
Isso será possível por meio da interface do navegador, conforme mostrado abaixo:
Mais detalhes estão descritos na documentação w3.org tcp-udp-sockets.
http://raw-sockets.sysapps.org/#interface-tcpsocket
https://www.w3.org/TR/tcp-udp-sockets/
Outra alternativa é usar Chrome Sockets
Criando conexões
Enviando dados
Recebendo dados
Você também pode tentar usar
HTML5 Web Sockets
(embora não seja uma comunicação TCP direta):http://www.html5rocks.com/en/tutorials/websockets/basics/
Seu servidor também deve estar ouvindo com um servidor WebSocket como o pywebsocket, alternativamente, você pode escrever o seu próprio conforme descrito no Mozilla
fonte
O projeto ws2s visa trazer o soquete para o js do lado do navegador. É um servidor websocket que transforma websocket em socket.
diagrama esquemático ws2s
amostra de código:
fonte
Veja jsocket . Eu mesmo não usei. Faz mais de 3 anos desde a última atualização (em 26/06/2014).
* Usa flash :(
Da documentação :
fonte
A solução que você realmente está procurando são os soquetes web. No entanto, o projeto de cromo desenvolveu algumas novas tecnologias que são conexões diretas de TCP TCP cromo
fonte
Para conseguir o que deseja, você teria que escrever dois aplicativos (em Java ou Python, por exemplo):
Aplicativo de ponte que fica na máquina do cliente e pode lidar com soquetes TCP / IP e WebSockets. Ele irá interagir com o soquete TCP / IP em questão.
Aplicativo do lado do servidor (como um JSP / Servlet WAR) que pode falar com WebSockets. Inclui pelo menos uma página HTML (incluindo código de processamento do lado do servidor, se necessário) para ser acessada por um navegador.
Deve funcionar assim
Nota 1: As etapas acima são uma grande simplificação e não incluem informações sobre tratamento de erros e solicitações keepAlive, no caso de o cliente se desconectar prematuramente ou o servidor precisar informar aos clientes que está fechando / reiniciando.
Nota 2: Dependendo de suas necessidades, pode ser possível mesclar esses componentes em um se o servidor de soquete TCP / IP em questão (com o qual a ponte fala) estiver na mesma máquina que o aplicativo do servidor.
fonte