?? tcpreceiver.java
字號:
import java.io.*;
import java.net.*;
import javax.comm.*;
import java.util.StringTokenizer;
public class TCPReceiver extends Thread
{
DisplayToSPI parent;
// constante
final int TIME_WAITING_FOR_TCPIP_CONNECTION = 5000;
final int fiReactionTime = 500;
int TCPIP_WAIT_PORT = 0;
int TIME_WAITING_FOR_COM_RESPONCE = 300;
int BAUD_RATE = 2400;
int PARITY = SerialPort.PARITY_EVEN;
int DATA_BITS = SerialPort.DATABITS_8;
int STOP_BITS = SerialPort.STOPBITS_2;
boolean DEBUG = false;
boolean ffWaitData = true;
boolean ffRunThread = true;
TCPReceiver(DisplayToSPI Parent,boolean Debug,int TcpIpPort)
{
// se transfera setarile de DEBUG si portul TCP/IP pe care se asteapta conectarea
DEBUG=Debug;
TCPIP_WAIT_PORT=TcpIpPort;
parent=Parent;
}
public synchronized void run()
{
// out DEBUG
if (DEBUG) System.out.println("TCPReceiver: Metoda run()");
// bucla este valida pana la inchiderea aplicatiei
while(ffRunThread){
// se initializeaza variabilele si vectorii
int liTcpPort=TCPIP_WAIT_PORT;
String ltCOMStringReceived="";
String ftStringReceived="";
String ftStringToSend="";
Socket wskSocket = null;
ServerSocket wskServerSocket = null;
try
{
// se initializeaza socket-ul care va astepta conectari pe TCP/IP
wskServerSocket=new ServerSocket(liTcpPort);
// out DEBUG
if (DEBUG) System.out.println("TCPReceiver: S-a creat un Socket pe portul " + liTcpPort);
wskServerSocket.setSoTimeout(TIME_WAITING_FOR_TCPIP_CONNECTION);
}
catch( IOException ioe)
{
// nu mai asteptam date
System.out.println("TCPReceiver: Eroare - Tini nu poate crea ServerSocket");
}
// ********************************************
// ******* se asteapta date pe TCP/IP *********
// ********************************************
while(ffWaitData)
{
// out DEBUG
if (DEBUG) System.out.println("TCPReceiver: Tini asteapta date pe TCP/IP");
if (wskServerSocket == null){
// daca nu mai avem ServerSocket trebuie sa semnalam eroarea
System.out.println("TCPReceiver: Eroare - ServerSocket==null");
ffWaitData=false;
break;
}
try
{
// se asteapta date pe TCP/IP (pt o perioada setata de TIME_WAITING_FOR_TCPIP_CONNECTION msec.)
wskSocket = wskServerSocket.accept();
try
{
// se instantiaza o 'intrare' si o 'iesire' pentru winsock
DataInputStream tcp_dis = new DataInputStream(wskSocket.getInputStream());
PrintWriter tcp_os = new PrintWriter(new BufferedOutputStream(wskSocket.getOutputStream()),false);
String ltStringReceived = tcp_dis.readLine();
if (ltStringReceived.startsWith("spi:")){
// ************************************
// ****** trebuie afisat pe SPI *******
// ************************************
// facem parcing pentru string
// out
if (DEBUG) System.out.println("TCPReceiver: Stringul receptionat pt SPI este " + ltStringReceived);
// taiem primele 4 caractere
ltStringReceived=ltStringReceived.substring(4);
// out
if (DEBUG) System.out.println("TCPReceiver: Stringul receptionat pt SPI dupa trunchiere este " + ltStringReceived);
// impartim String-ul in array de String[]
StringTokenizer stkParcer = new StringTokenizer(ltStringReceived,";");
int liStringsNumber=stkParcer.countTokens();
if (liStringsNumber>0){
String[] ltTemporarStringsArray=new String[liStringsNumber];
for (int lia=0;lia<liStringsNumber;lia++)
ltTemporarStringsArray[lia]=stkParcer.nextToken();
// transferam stringurile pt SPI la DisplayToSPI (nu le incarcam in variabilele publice ale lui TCPReceiver ci le trasfera prin referinta la CommandSPI)
parent.DisplayStrings(ltTemporarStringsArray);
}
// transmitem prin TCP/IP un raspuns la client ca totul este OK [E5h (229)]
ltCOMStringReceived = String.valueOf((char)((byte)229));
}
// trimite raspunsul prin TCP/IP
tcp_os.println(ltCOMStringReceived);
tcp_os.flush();
// inchide conexiunea
tcp_os.close();
tcp_dis.close();
}
catch( Exception e)
{
// out DEBUG
if (DEBUG) System.out.println("TCPReceiver: Eroare - la stream-urile de pe TCP/IP err("+ e + ")");
}
}
catch( IOException ioe)
{
// out DEBUG
if (DEBUG) System.out.println("TCPReceiver: Eroare - la ServerSocket (a expirat TimeOut-ul) err("+ ioe+ ")");
}
// facem curatenie
System.gc();
}
// out DEBUG
try{
wskSocket.close();
wskServerSocket.close();
if( DEBUG) System.out.println( "TCPReceiver: Winsock-ul a fost inchis.");
}
catch(IOException ioe){
if( DEBUG) System.out.println( "TCPReceiver: Winsock-ul nu a putut fi inchis.");
}
// facem curatenie
System.gc();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -