a ver si podéis echarme una mano. Tengo un dispositivo ZLAN 6042 como este:
zlan 6042
Es un dispositivo de entrada y salida. Tiene una ip y un puerto.
Tengo el applet de java:
Código:
Tengo también el index.htmimport java.awt.*; import java.applet.*; import java.net.*; import java.io.*; import java.awt.event.*; public class testrec extends Applet implements ActionListener,Runnable { private TextField m_TextFiledIP; private TextField m_TextFiledPort; private Button m_BtnConnect; private TextArea m_TextAreaRec; Socket m_conSocket; DataOutputStream m_out; DataInputStream m_in; int m_iConnect=0; Thread m_ThreadRec; protected Button makebutton(String name, GridBagLayout gridbag,GridBagConstraints c) { Button btn = new Button(name); gridbag.setConstraints(btn, c); add(btn); return btn; } protected void makelabel(String name, GridBagLayout gridbag,GridBagConstraints c) { Label label= new Label(name,Label.LEFT); gridbag.setConstraints(label, c); add(label); } protected TextField makeTextField(String name,int len, GridBagLayout gridbag,GridBagConstraints c) { TextField field; field= new TextField(name,len); gridbag.setConstraints(field, c); add(field); return field; } protected TextArea makeTextArea(String name,int lenx,int leny, GridBagLayout gridbag,GridBagConstraints c) { TextArea field; field= new TextArea(name,lenx,leny,TextArea.SCROLLBARS_VERTICAL_ONLY); gridbag.setConstraints(field, c); add(field); return field; } private String GetHostIP() { return getCodeBase().getHost(); /* String s1 = ""; if(s.length() < 15) return s; for(int i = 0; i < 16; i += 4) s1 = s1 + String.valueOf(Long.valueOf(s.substring(i, i + 3), 16)) + '.'; return s1.substring(0, s1.length() - 1); */ } public void init() { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); c.anchor=GridBagConstraints.NORTHWEST; c.insets=new Insets(1,1,1,1); c.gridwidth=1; makelabel("设备地址:",gridbag, c); m_TextFiledIP=makeTextField(GetHostIP(),12,gridbag,c); m_TextFiledIP.enable(false); makelabel("端口:",gridbag, c); m_TextFiledPort=makeTextField("4001",5,gridbag,c); c.gridwidth = GridBagConstraints.REMAINDER; //本行结束 m_BtnConnect=makebutton("连接",gridbag,c); m_BtnConnect.addActionListener(this); m_BtnConnect.setActionCommand("Connect"); makelabel(" ",gridbag, c); makelabel("接收数据区:",gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //本行结束 m_TextAreaRec=makeTextArea("",5,50,gridbag,c); m_conSocket=null; m_out=null; m_in=null; m_ThreadRec=new Thread(this,"RecThread"); m_ThreadRec.start(); resize(500,400); } public void destroy() { m_ThreadRec.stop(); m_ThreadRec = null; } public byte[] ConvertStrtoHex(String str,int len) { byte bufarr[]=new byte[len]; for(int i=0;i<len;i++) { bufarr[i]=Byte.parseByte(str.substring(i*3,i*3+2),16); } return bufarr; } public void actionPerformed(ActionEvent e) { if(e.getActionCommand()=="Connect") { if(m_iConnect==0) { if(TCPInit()==1) { m_BtnConnect.setLabel("断开"); m_iConnect=1; } } else { TCPClose(); m_BtnConnect.setLabel("连接"); m_iConnect=0; } } } public void TCPClose() { try { m_conSocket.close(); m_out.close(); m_in.close(); } catch(IOException ioexception) { } } public int TCPInit() { try { String strip=m_TextFiledIP.getText(); int port=(int)Integer.parseInt(m_TextFiledPort.getText()); m_conSocket = new Socket(strip,port); m_conSocket.setSoTimeout(2000); m_out = new DataOutputStream(m_conSocket.getOutputStream()); m_in = new DataInputStream(m_conSocket.getInputStream()); } catch(UnknownHostException unknownhostexception) { System.err.println("Don't know about host: taranis."); return 0; } catch(IOException ioexception) { System.err.println("Couldn't get I/O for the connection to: taranis."); return 0; } return 1; } public void PutBytetoTextField(byte[] bufarr,int len) { String str=new String(bufarr); m_TextAreaRec.appendText(str); } void Delay(int i) { try { Thread.sleep(i); } catch(Exception exception) { } } public void run() { String curRunning=Thread.currentThread().getName(); if(curRunning.equals("RecThread")) { while(true) { if(m_iConnect==1) { byte recbuf[]=new byte[1024]; int len; try { len = m_in.read(recbuf,0,1024); PutBytetoTextField(recbuf,len); } catch(IOException ioexception) { Delay(1000); } } else { Delay(1000); } } } } public void paint(Graphics g) { //g.drawString("Welcome to Java!!", 50, 60 ); } }
Código HTML:
<HTML> <HEAD> <TITLE> ZLSN2000 Module </TITLE> </HEAD> <BODY> <APPLET CODEBASE = "." CODE = "testrec.class" NAME = "ZLSN2000 Module" WIDTH = 500 HEIGHT = 400 HSPACE = 0 VSPACE = 0 ALIGN = middle > <PARAM NAME = "HostIP" VALUE = "000.000.000.000"> </APPLET> </BODY> </HTML>
La verdad que es que me llamó la atención esto y lo quise probar pero no sé por dónde empezar la verdad.
No sé si tengo que realizar un socket, si tengo que conectarme a una base de datos.
Yo le he conectado un cable de alimentación y el puerto ehernet. También un pulsador porque quería hacer algo en plan que si pulso el pulsador que me cambie de imágen o algo del estilo pero no sé por dónde empezar.
La guía tampoco dice mucho.
EDIT: Veo que lo que he puesto ya tiene un socket creado e imagino que los tiros van por ahí, pero no sé lo que tengo que hacer.
Yo imagino que el aparato hace como de servidor y se queda a la espera de que se conecte un cliente, y en el momento que se conecte un cliente da una respuesta. Eso sí, ni idea de qué tengo que hacer.
Veo que hay un Socket creado y un Hilo también. EL método init() parece que hace la inicialización de todo pero no veo un main. Es eso lo que falta??? deberia hacer el main y en ese main llamar al init()??? Eso imagino que inicializa el servidor, pero luego en el cliente qué es lo que tengo que hacer, sólo conectarme y ya está???
A ver si alguien puede guiarme
Otro saludo