Usando portas (com, lpt) atravez de Applet em web browser

Oi Comunidade,

Estou ralando pra descobrir uma forma que funcione em todos os browsers para conseguir acesso direto às portas do client, preciso de acessar as COM1-8, LPT1 e impressoras configuradas na rede, mas tem q ser via client.

Consegui em activeX mas soh funciona em i.e., sendo assim ainda tô ferrado nos meus clients linux e nos que usam firefox.

Fucei muito no w3c e encontrei uma possível saída, são esses tais javaapplets, que pelo que entendi é um programa feito em java (.class) que é baixado pro client e executado,

agora, já descobri que a função de impressão do javaapplet usa o windows, o q eu não quero, então o que quero saber é:

1 - Existe como acessar uma determinada porta de comunicação do client e enviar informações para ela sem o “dedão” do sistema operacional?

2 - Tem como me enviar um exemplo ou pelo menos un artigo?

Espero que vocês consigam me ajudar, Sei q não sou o único com esse pepino, e com certeza vou compartilhar a saída se houver alguma.

Abs,
Ton

Eu odeio ser o cara que dah mas noticias, mas voce acabou de dar de cara com um problemasso. Nao tem absolutamente NENHUM outro jeito que nao envolva fazer uma pagina web acessar o hardware?

Olá

Acho que entendi porque o CV perguntou se você não tem outra opção. Foi o fato de você nem ao menos saber o que é uma applet.

Este tipo de problema pode ser resolvido usando applets e pode rodar em Windows, Linux, IE, Firefox, Netscape, etc.

[]s
Luca

Sim, mas costuma dar um trabalho do cao pra conseguir fazer o treco funcionar mesmo em todas as plataformas e browsers, alem de passar por cima do modelo de seguranca dos browsers e JVMs :frowning:

Olá

CV, mas é claro que dá trabalho. Sei que não é coisa trivial porque já participei de vários projetos que faziam isto. Se estou bem lembrado, o Banco Postal para ser portado para Linux precisou de uns 3 dias.

Mas não considero que o uso de applets assinadas seja passar por cima do modelo de segurança do browser. Na minha opinião a exigência de uso de um certificado de preferência de raiz confiável é exatamente reforçar o modelo de segurança. O Activex é que pode passar batido

[]s
Luca

ele poderia usar webservices … mas pra isso é outras 5000 horas de voo em java …
antes que o cv fale de novo …

to rindo até agora … hehehehe

[quote=Luca]Olá

Acho que entendi porque o CV perguntou se você não tem outra opção. Foi o fato de você nem ao menos saber o que é uma applet.

Este tipo de problema pode ser resolvido usando applets e pode rodar em Windows, Linux, IE, Firefox, Netscape, etc.

[]s
Luca[/quote]

Boa tarde a todos,

Luca,

Não tem problema ser difícil, se resolve meu problema de acesso às portas do client eu vou correr atraz disto, e como vc já fez isto antes, tem como me ensinar como fazer, ou pelo menos me passar algum artigo?

Realmente não conheco nada de criação de applets, e do java soh conheço o javascript, não possuo compilador nenhum de java (tenho j#)
Mas se vc me disser o que eu preciso estudar e que compilador ou ide preciso ter, já ajuda d+.

Preciso de toda a ajuda que puderem me dar, sou autônomo e estou quase perdendo clientes por conta deste problema.

Conto com vocês,
Abs,
Ton

[list]
[1] JavaScript não é Java e nem j#
[2] http://java.sun.com/j2se/1.5.0/download-netbeans.html Download do java + IDE netbeans
[3] http://www.guj.com.br/user.article.list.chain listas de artigos pra voce iniciar
[4] http://java.sun.com/docs/index.html isso vai ser util
[/list]
flw s

[quote=scottys0]ele poderia usar webservices … mas pra isso é outras 5000 horas de voo em java …
antes que o cv fale de novo …

to rindo até agora … hehehehe[/quote]

scottys0,

Até onde conheço de webservices, eles servem apenas para comunicação entre aplicativos, e eu quero conversar com um dispositivo do client atraves de um webbrowser,

Se tem jeito de usar webservices pra fazer o q eu quero, tem jeito de me mostrar um exemplo???

Então vamos lá.

  1. Para acessar as portas COM e LPT locais do computador, pode-se usar uma biblioteca que siga a especificação javax.comm. Uma delas é da própria Sun e funciona (modo de dizer) em Windows e Solaris Sparc. A outra é do projeto rxtx ( www.rxtx.org ) , e funciona em Linux.
  2. Se você precisa de acessar o seu dispositivo e ele se comporta como uma impressora, no caso LPT, você pode usar o javax.comm tranquilamente. Se ele não se comporta como uma impressora (você quer acessar os bits para fazer alguma outra coisa) o javax.comm não é indicado.
  3. Como a biblioteca javax.comm precisa de copiar uma biblioteca .dll ou .so para o seu path (não classpath), é aconselhável fazer um instaladorzinho - não dá para usar direto.
  4. Referências sobre javax.comm há algumas aqui mesmo neste fórum.

[quote=Glaudiston][quote=scottys0]ele poderia usar webservices … mas pra isso é outras 5000 horas de voo em java …
antes que o cv fale de novo …

to rindo até agora … hehehehe[/quote]

scottys0,

Até onde conheço de webservices, eles servem apenas para comunicação entre aplicativos, e eu quero conversar com um dispositivo do client atraves de um webbrowser,

Se tem jeito de usar webservices pra fazer o q eu quero, tem jeito de me mostrar um exemplo???[/quote]

ai que está … voce pode fazer um aplicativo nativo em java para comunicar como o webservice … quando o cliente fizesse uma requisição onde a resposta do servidor envolveria um acesso a porta … voce (via webservice) enviaria o resultado para um programa no cliente ouvindo em uma porta x … e este por sua vez faria o trabalho … sem ter a necessidade de implementação de applet …
o problema seria para a instalação … se forem muitas maquinas pode ficar uma #$$#@% instalar o programinha client em varias maquinas …

Fernando, usar webservices aqui nao faz o menor sentido (bom, faz tanto sentido quanto usar RMI, sockets, HTTP ou qualquer outro protocolo de comunicacao). O problema nao eh fazer o servidor falar com o cliente, eh fazer o cliente falar com o hardware :wink:

Mas um cliente nativo seja ele em java ou não seria melhor para converar com o hardware do que um Applet … este receberia a requisição e faria o trabalho, mais limpo e sem a complicada arte burocratica de assinaturas e reconhecimento de firmas em cartorio dos Applets …

PS. Applet assinado até parece coisa do governo brasileiro … :twisted:

Oi Comunidade,

Baixei o tal do javax.comm e o java sdk1.5.0_03 e o netbeans, até funciona legal, pra fazer o hello world e outros tutoriais q encontrei no javacoffeebreak etc, mas com o javax.comm tah difícil,

pra começar, consegui fazer funcionar a BlackBox que controla as portas COM, mas as ParallelBlackBox nada feito.
quando chamo:
java -native ParallelBlackBox

ele retorna:
Error: native VM not supported

já procurei pra tudo quanto é lado na net, unica coisa q achei é que meu sdk tem q estar atualizado, mas acabei de instalar!!!

Outra coisa, nunca consigo carregar os pacotes javax.comm nas classes q crio, sempre dá um erro dizendo q o package naum existe ou a classe naum é valida ou algo assim.
tentei:
package javax.comm
e tambem:
imports javax.comm

não é apenas uma questão dos browsers, nem o javax.comm eu consigo acessar, fiz a instalação do jeito q estava no html, com excessão de uma linha que não funcionou:
C:>\JRE\bin\jre -cp c:\JRE\jre\lib\comm.jar;c:\commapi\samples\Blackbox\BlackBox.jar BlackBox
e nada funciona, se alguem tem alguma dica ou artigo, agradeço

Esse pacote javax.comm foi disponibilizado pela Sun no milênio passado, quando o Papa não estava doente e a Sun não tinha brigado ainda com a Microsoft (agora estão amiguinhas de novo).
Então a documentação supõe que você está usando o JDK 1.1 (tanto é que a implementação deles funciona belezinha com MSJVM!)
Há um HTML cujo nome é JDK12.html (se não me engano), use esse HTML como referência para a instalação e configuração. É terrível, não dá para seguir as instruções exatamente como estão escritas - por exemplo, não existe mais esse parâmetro -native, e outras coisas.

Blz… consegui fazer um class controlar a impressora…

estou quase lá,

agora fiz o applet e está dando o seguinte erro no console do java:

Java Plug-in 1.5.0_03
Using JRE version 1.5.0_03 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Glaudiston


----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
l:   dump classloader list
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
x:   clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------

 * * * Rotina de controle de portas de comunicação * * * 
Antes de definir a string
Antes de pegar o getParameter
Antes de imprimir a linha
Insert your message here!
Antes do getPortIdentifiers
java.lang.ExceptionInInitializerError
	at portcontrol.init(portcontrol.java:44)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission javax.comm.properties read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at javax.comm.CommPortIdentifier.<clinit>(CommPortIdentifier.java:678)
	... 3 more

Acredito que este erro seja por falta de permissão, deve ser o tal problema de assinatura dos applets,
então como assino ele?

Vai aí o código do applet que criei:

[code]/*
*

  • Controle de portas seriais e paralelas
  • 2005 por Glaudiston Gomes da Silva
  • glaudiston@hotmail.com
  • /
    import javax.comm.
    ;
    import java.util.;
    import java.lang.
    ;
    import java.io.;
    import java.awt.
    ;
    import java.applet.*;
    public class portcontrol extends Applet
    {
    static CommPortIdentifier CPIone;
    static Enumeration Eone;
    static ParallelPort Pone;
    static OutputStream OSone;
    static DataOutputStream DOSone;
    private final String PARAM_linha = “linha”;
    // Retorna a lista de parametros
    public String[][] getParameterInfo()
    {
    String[][] info = {
    {
    PARAM_linha, “String”, “String a ser impressa”
    },
    };
    return info;
    }
    public void init ( )
    {
    System.out.println(" * * * Rotina de controle de portas de

comunicação * * * ");
System.out.println(“Antes de definir a string”);
String linha;
System.out.println(“Antes de pegar o getParameter”);
linha = getParameter(PARAM_linha);
Label mLabel = new Label ("linha teste ");
add(mLabel);
System.out.println(“Antes de imprimir a linha”);
System.out.println(linha);
System.out.println(“Antes do getPortIdentifiers”);
Eone=CommPortIdentifier.getPortIdentifiers();
System.out.println(“Antes de entrar no while”);
while(Eone.hasMoreElements())
{
CPIone=(CommPortIdentifier)Eone.nextElement();

if((CPIone.getPortType()==CommPortIdentifier.PORT_PARALLEL)&&((CPIone.getNam

e()).compareTo(“LPT1”)==0))
{
try
{

Pone=(ParallelPort)CPIone.open(CPIone.getName(),3000);
}
catch(PortInUseException e){}

System.out.println(CPIone.getCurrentOwner());
System.out.println(Pone.getMode());
try
{
Pone.setMode(1);
//other modes not working…
}
catch(UnsupportedCommOperationException e)
{
System.out.println("unsupported byte

mode");
}
System.out.println(“unidirectional”);
}
}
try
{
OSone=Pone.getOutputStream();
DOSone=new DataOutputStream(OSone);
/// the data goes out here… this is just a test

byte
DOSone.writeChars(“Testes de impressão”);
DOSone.writeByte(10);
System.out.println(“You have come here”);
}
catch(IOException e)
{
System.out.print(“you are in ioexception”);
e.printStackTrace();
}

}

}[/code]

Se alguem puder me ajudar com a assinatura deste applet agradeço muito.
Já estou muito atrazado para a entrega desta rotina.

Abs,
Ton

No site da SUN tem a nova versão da javax.comm, a 3.0; porém esta versão não tem a API para Windows. Para essa plataforma temos que nos virar com a versão 2.0, que segundo é sabido, é uma versão buguenta!
Eu estou pensando em trabalhar com java e automação industrial… estava esperando mais da SUN nessa área :cry:

http://www.sun.com/download/products.xml?id=41bdadf9

Olá

Blz! Funciona no Linux (RedHat) e tem bem mais documentação do que o pacote anterior! Talvez não precise mais do rxtx

[]s
Luca

é mas preciso de um javax.comm que rode em windows tbm ainda preciso de ajuda pra assinar meu applet…

ajuda ai pessal…

Olá

O javax.comm 2.0 para Windows vc baixa no site da Sun.

Só eu já passei uns trocentos links de assinatura de applet. Já coloquei passo a passo e citei o link várias vezes. Será que está faltando busca?

[]s
Luca