⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpconnection.java

📁 This software transmits data (using TCP/IP) from I/O pins (of the Tini Board - from Dallas Semicondu
💻 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 + -