📄 tcpconnection.java
字号:
import java.io.*;
import java.net.*;
public class TCPConnection extends Thread
{
Polarr parent;
// constante
final int TIME_WAITING_FOR_TCPIP_CONNECTION = 60000;
final int const_MaxTrialToSendDataToServer = 3;
int fiSendPort = 0;
int fiReceivePort = 0;
String ftDispatcherIP = "";
boolean DEBUG = false;
boolean ffWaitData = true;
boolean ffRunThread = true;
Socket wskSendSocket = null;
PrintWriter pwOutStream = null;
TCPConnection(Polarr Parent,boolean Debug,int SendPort,int ReceivePort,String DispatcherIPAddress)
{
parent=Parent;
// se transfera setarile de DEBUG si portul TCP/IP pe care se asteapta conectarea
DEBUG=Debug;
fiSendPort=SendPort;
fiReceivePort=ReceivePort;
ftDispatcherIP=DispatcherIPAddress;
}
public void run()
{
// out DEBUG
if (DEBUG) System.out.println("TCPConnection: Metoda run()");
// bucla este valida pana la inchiderea aplicatiei
while(ffRunThread){
// se initializeaza variabilele si vectorii
int liReceivePort=fiReceivePort;
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(liReceivePort);
// out DEBUG
if (DEBUG) System.out.println("TCPConnection: S-a creat un Socket pe portul " + liReceivePort);
wskServerSocket.setSoTimeout(TIME_WAITING_FOR_TCPIP_CONNECTION);
}
catch( IOException ioe)
{
// nu mai asteptam date
System.out.println("TCPReceiver: Eroare - Tini nu poate crea ServerSocket");
}
if (DEBUG) System.out.println("CommandPolarr: while(ffWaitData)"); while(ffWaitData){
// ********************************************
// ******* se asteapta date pe TCP/IP *********
// ********************************************
// out DEBUG
if (DEBUG) System.out.println("TCPConnection: Tini asteapta date pe TCP/IP");
if (wskServerSocket == null){
// daca nu mai avem ServerSocket trebuie sa semnalam eroarea
System.out.println("TCPConnection: 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);
// trimitem datele spre Dispecer
parent.SendActualBytesValue();
String ltStringReceived="";
while(ffWaitData){
if (DEBUG) System.out.println("TCPConnection: Se citeste o linie");
int liFirstUnsignedByte=tcp_dis.readUnsignedByte();
int liSecondeUnsignedByte=tcp_dis.readUnsignedByte();
int liCR=tcp_dis.readUnsignedByte();
int liLF=tcp_dis.readUnsignedByte();
if (DEBUG) System.out.println("BYTE(0)="+liFirstUnsignedByte+" BYTE(1)="+liSecondeUnsignedByte+" BYTE(2)="+liCR+" BYTE(4)="+liLF);
if(!(liCR==13 && liLF==10)){
liFirstUnsignedByte=liSecondeUnsignedByte;
liSecondeUnsignedByte=liCR;
liCR=liLF;
liLF=tcp_dis.readUnsignedByte();
if (DEBUG) System.out.println("BYTE(0)="+liFirstUnsignedByte+" BYTE(1)="+liSecondeUnsignedByte+" BYTE(2)="+liCR+" BYTE(4)="+liLF);
if (DEBUG) System.out.println("TCPConnection: Se mai asteapta vbCrLf");
}
// citim si bytes[] care sunt disponibili
int liBytesRead=tcp_dis.available();
byte lbyteArrayRemainBytes[]=null;
if (liBytesRead>0) {
lbyteArrayRemainBytes=new byte[liBytesRead];
tcp_dis.read(lbyteArrayRemainBytes,0,liBytesRead);
}
if (DEBUG) {
System.out.println("TCPConnection: Sa receptionat FirstByte="+liFirstUnsignedByte);
System.out.println("TCPConnection: Sa receptionat SecondeByte="+liSecondeUnsignedByte);
if (liBytesRead>0){
System.out.print("TCPConnection: Sa mai receptionat si:");
for (int lia=0;lia<liBytesRead;lia++)
System.out.print(lbyteArrayRemainBytes[lia]+",");
}
System.out.println("");
}
if (liFirstUnsignedByte == 127){
// *****************************************
// ****** trebuie trimis la porturi ********
// *****************************************
if (DEBUG) System.out.println("TCPConnection: Se transmite la CommandPolarr nr."+liSecondeUnsignedByte);
parent.SendToPorts(liSecondeUnsignedByte);
// transmitem prin TCP/IP un raspuns la Dispecerat ca totul este OK [E5h (229)]
ltCOMStringReceived = String.valueOf((char)((byte)229));
}
if (DEBUG) System.out.println("TCPConnection: Se transmite confirmarea");
// trimite raspunsul prin TCP/IP
tcp_os.println(ltCOMStringReceived);
tcp_os.flush();
}
// inchide conexiunea
tcp_os.close();
tcp_dis.close();
// facem curatenie
System.gc();
}
catch( Exception e)
{
// out DEBUG
if (DEBUG) System.out.println("TCPConnection: Eroare - la stream-urile de pe TCP/IP err("+ e + ")");
}
}
catch( IOException ioe)
{
// out DEBUG
if (DEBUG) System.out.println("TCPConnection: 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( "TCPConnection: Winsock-ul a fost inchis.");
}
catch(IOException ioe){
if( DEBUG) System.out.println( "TCPConnection: Winsock-ul nu a putut fi inchis.");
}
// facem curatenie
System.gc();
}
}
public void destroy()
{
ffWaitData=false;
ffRunThread=false;
stop(); System.gc();
super.destroy();
}
public void SendToTcpIP(byte FirstByte,byte SecondeByte)
{
boolean lfKeepTry=true;
int liMaxTrialConnection=const_MaxTrialToSendDataToServer;
while(lfKeepTry){
if (DEBUG) System.out.println("TCPConnection: mai incercam sa trimitem datele de "+liMaxTrialConnection+" ori");
try{
wskSendSocket=new Socket(InetAddress.getByName(ftDispatcherIP),fiSendPort); // 1.2.3
/* IStr=new InputStreamReader(MySocket.getInputStream());
InS=new BufferedReader(IStr,2048);*/
try {
pwOutStream=new PrintWriter(wskSendSocket.getOutputStream());
char[] lcharArray = new char[3];
lcharArray[0]=(char)(127);
lcharArray[1]=(char)(FirstByte);
lcharArray[2]=(char)(SecondeByte);
pwOutStream.println(lcharArray);
pwOutStream.flush();
lfKeepTry=false;
pwOutStream.close();
}
catch(IOException ioe){
System.out.println("TCPConnection: nu s-a putut realiza PrintWriter (err:"+ioe+")");
}
wskSendSocket.close();
}
catch(UnknownHostException uhe){
System.out.println("TCPConnection: nu exista IP="+ftDispatcherIP+"(err:"+uhe+")");
}
catch(IOException ioe){
System.out.println("TCPConnection: este o eroare la deschiderea portului "+fiSendPort+"(err:"+ioe+")");
}
liMaxTrialConnection--;
if (pwOutStream!=null) pwOutStream=null;
if (wskSendSocket!=null) wskSendSocket=null;
try{
sleep(1000); } catch(InterruptedException ie){} System.gc();
if (liMaxTrialConnection<0)
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -