Ajuda Com Socket!

Boa tarde a todos,

e o seguinte,

estou começando a trabalhar com sockets… hoje… ja dei uma boa lida na net sobre ao assunto e com base no que aprendi modifiquei as duas classes para trabalhar ( similar ) uma comunicaçao via socket emtre cliente/servidor.

segue: SERVER

package socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
	
	ServerSocket srvcktServer;
	
	public SocketServer(){
		while (true)   
	    {
		try{
			System.out.println("Listening... Port:8080");
			srvcktServer = new  ServerSocket(8080);
			Socket sckSocket = srvcktServer.accept();
			DataInputStream dtaIn = new DataInputStream(sckSocket.getInputStream());
			DataOutputStream dtaOut = new DataOutputStream(sckSocket.getOutputStream());
			System.out.println(sckSocket.getPort() + " Recebendo dados..");
			String sIn = dtaIn.readUTF();
			dtaOut.writeUTF("[OK] RECEBIDO !");
			dtaOut.flush();
			System.out.println(sIn);
			dtaIn.close();
			dtaOut.close();
			srvcktServer.close();
		}catch(IOException err){
			System.out.println(err);
			System.out.println("ESTOURO DE CONEXÕES !");
			System.out.println("Restartando Autorizador....");
			//ReconnectSocket();
		} catch(StackOverflowError err){
			System.out.println("ESTOURO DE CONEXÕES !");
			System.out.println("Restartando Autorizador....");
			//ReconnectSocket();
		}
		//ReconnectSocket();
	    }
		
	}
	
	public static void ReconnectSocket(){
		SocketServer obj = new SocketServer();
	}
	
	public static void main(String args[]){ 
		ReconnectSocket();
	}

}

segue: Cliente

package socket;

import java.io.*;
import java.net.*;
public class SocketClient  { 

	public void Start(){
		try {
			Socket sckClient = new Socket("192.168.2.144",8080);
			DataInputStream dtaIn = new DataInputStream(sckClient.getInputStream());
			DataOutputStream dtaOut = new DataOutputStream(sckClient.getOutputStream());
			System.out.println("Conectando em: 192.168.2.144:80");
			
			dtaOut.writeUTF("0215698987458");
			System.out.println(dtaIn);
			String sIn = dtaIn.readUTF();
			System.out.println(sIn);
		}catch(UnknownHostException err){
			System.out.println(err);
		}catch(IOException err){
			System.out.println(err);
		}
	}
}

Minha duvida e o seguinte dessa forma esta correta a implementação do uso de socket sem relação a ele responder multiplas requisições…

e dessa maneira que se faz … um loop… e sempre que se aceita a conexao depois de tratado tem que fachar a conexao.

tornar reabrir e escutar a porta…

ou a outra maneira…,

porque estou pensando no seguinte. se eu estou ocupado enviando algo se um outro computador for conetcar como fica?..

vc deve lidar com threads se não provavelmente sua aplicação irá travar

Se eu fosse usar thread onde colocaria no servidor? como implementaria isso?

tem como vc me dar um exemplo?

e agora ta certo? adicionei a thread…

package socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer extends Thread {
	
	ServerSocket srvcktServer;
	public void run(){
	//public SocketServer(){
		
		while (true)   
	    {
		try{
			System.out.println("Listening... Port:8080");
			srvcktServer = new  ServerSocket(8080);
			Socket sckSocket = srvcktServer.accept();
			DataInputStream dtaIn = new DataInputStream(sckSocket.getInputStream());
			DataOutputStream dtaOut = new DataOutputStream(sckSocket.getOutputStream());
			System.out.println(sckSocket.getPort() + " Recebendo dados..");
			String sIn = dtaIn.readUTF();
			dtaOut.writeUTF("[OK] RECEBIDO !");
			dtaOut.flush();
			System.out.println(sIn);
			dtaIn.close();
			dtaOut.close();
			srvcktServer.close();
		}catch(IOException err){
			System.out.println(err);
			System.out.println("ESTOURO DE CONEXÕES !");
			System.out.println("Restartando Autorizador....");
			//ReconnectSocket();
		} catch(StackOverflowError err){
			System.out.println("ESTOURO DE CONEXÕES !");
			System.out.println("Restartando Autorizador....");
			//ReconnectSocket();
		}
		//ReconnectSocket();
	    }
		
	}//}
	
	public static void ReconnectSocket(){
		SocketServer obj = new SocketServer();
		obj.start();
	}
	
	public static void main(String args[]){ 
		ReconnectSocket();
	}
}