Sockets + Threads

Olá…estou com um probleminha…

[b]Precisava fazer um programinha…que utilizasse sockets…e que para cada porta aberta pelo ServerSocket…( no servidor…)…fosse criado uma Thread para realizar determinadas tarefas… sem numero máximo de conexoes permitidas por exemplo…[b]

Estou tendo dificuldades para fazer …alguem poderia me ajudar???

Obrigado!!

Onde estão, mais exatamente, essas dificuldades?

Fala galera, ai vai uma implementacao que usei em um curso:

[code]import java.net.;
import java.io.
;

public class Servidor implements Runnable
{
ServerSocket ss;

    public Servidor(int porta) throws Exception{
      ss = new ServerSocket(porta);

      new Thread(this).start();

      System.out.println("Servidor ouvindo na porta:" + porta);

    }

 public void run(){
      try{
           while(true){
                new TrataCliente(ss.accept()).start();
                System.out.println("Mais um cliente atendido!");

           }

      }catch(Exception e){
           e.printStackTrace();
           System.exit(1);
      }
 }
 public static void main(String[] args){
      try{
           new Servidor(1000);

      }catch(Exception e){
           e.printStackTrace();
           System.exit(1);
      }
 }

}

class TrataCliente extends Thread
{
private Socket client;

 public TrataCliente(Socket s){
      client = s;
 }

 public void run(){
      try{
           // aqui vai a sua comunicacao com o cliente
           ObjectInputStream oi = new ObjectInputStream(client.getInputStream());

           System.out.println("Chegou isso:" + oi.readObject());

           client.close();

      catch(Exception e){
           e.printStackTrace();
           System.exit(1);
      }
 }

}
[/code]

e esse eh o codigo de um cliente para teste, ele cria 10 threads para simular 10 clientes, se vc quiser testar mais do que isso, teste esse cliente com varias janelas simultaneas, nao aumente o numero de threads.

O cliente pode dar algumas exceptions de connection refused, mas o Servidor vai estar sempre estavel, isso acontece porque o seu micro vai ser o servidor e vai ser o cliente simulando um monte de gente, se fosse um caso real de uso o numero de refused cai gigantescamente.

Aqui na minha maquina eu testei o servidor e 8 janelas de clientes (80 clientes simultaneaos) e raramente dava refused. Na verdade quando comeco a rodar outro da algum refused, mas depois o cliente estabiliza

[code]import java.net.;
import java.io.
;

public class StressCliente extends Thread
{
private String server;
private int porta;

 public StressCliente(String server, int porta){
	 this.server = server;
	 this.porta = porta;
 }

 public static void main(String[] args){
      try{
           String server = "localhost";
           int porta = 1000;
           int numeroDeClientes = 10;

           for(int i=0; i < numeroDeClientes; i++){

               new StressCliente(server, porta).start();

		}

      }catch(Exception e){
           e.printStackTrace();
      }
 }


 public void run(){
      try{

               while(true){

                     Socket s = new Socket(server, porta);

                     System.out.println("Conectado a " + server + ":" + porta);

                     ObjectOutputStream oo = new ObjectOutputStream(s.getOutputStream());

                     oo.writeObject("Soh!");

                     s.close();
		   }

      }catch(Exception e){
           e.printStackTrace();
      }
 }

}[/code]

para testar inicie o servidor em uma janela e o cliente em outra!

Abraco,

Cara valeu hein!! :wink: !!!Vou testar e estudar certinho o código…

mas ja abusando da sua ajuda …vc poderia me ajuda r aresolver outtro probleminha…qeu eu vou ter que enfrentar…é que na verdade estou aprendendo sockets…agora…entaum existem coisas que ainda estao meio confusas…


preciso serializar um Objeto…(ImageIcon)…e transferi-lo na rede utilizando sockets…

alguem poderia me dar uma dica de como serializar este objeto e pega-lo do outro lado…

precisarei utilizar a classe ObjetcInputStream e ObjectOutputStream ???

Obrigado!

Valeu pela ajuda!!! :smiley:

Abraço…

[quote=“Duque”]preciso serializar um Objeto…(ImageIcon)…e transferi-lo na rede utilizando sockets…

alguem poderia me dar uma dica de como serializar este objeto e pega-lo do outro lado…

precisarei utilizar a classe ObjetcInputStream e ObjectOutputStream ???
[/quote]

Exatamente… não se esqueça de marcar os objetos como Serializable (usando public class ImageIcon implements java.io.Serializable). Deve ser relativamente simples usar os métodos readObject e writeObject, mas se vc tiver algum problema, dê um toque. :slight_smile:

Fala Duque,

bao, a serializacao eh feita automaticamento para todas as classes que implemetam a interface java.io.Serializable.

Caso vc queira que a sua classe seja serializavel vc precisa ver se os atributos dessa classe tb sao serializaveis. Tipos primitivos ja sao serializaveis por default.

Como vc precisa usar socktes o exemplo que te mandei ja faz isso, ele envia um objeto da classe String e do outro lado ele escreve na tela.

Se vc quiser enviar algum outro tipo de objeto o processo eh o mesmo, agora na hora que vc recebe-lo vc soh precisa fazer um cast:

[code]public class Pessoa implements java.io.Serializable
{
private int idade;
private String nome;
private String email;

 public Pessoa(){}
 public Pessoa(String nome, String email, int idade){....}

 // aqui vao os sets e gets ;)
....

}
[/code]

na hora do envio ficaria assim:

[code]…
//essa eh a classe cliente

Socket s = new Socket(server, porta);

System.out.println("Conectado a " + server + ":" + porta); 

ObjectOutputStream oo = new ObjectOutputStream(s.getOutputStream()); 

Pessoa p = new Pessoa("jose", "ze@ze.com", 18);
oo.writeObject(p);


[/code]

ou pra ficar mais limpo poderia apenas:

... oo.writeObject(new Pessoa("jose", "ze@ze.com", 18)); ...

bom, ai na leitura vc faria assim:

[code]//esse eh o trata cliente no server

ObjectInputStream oi = new ObjectInputStream(client.getInputStream());

 Pessoa p = (Pessoa) oi.readObject();

 System.out.println("Nome:" + p.getNome() + 
                             "Email:" + p.getEmail() + 
                             "Idade:" + p.getIdade() ); 
 ....

[/code]

Com o socket conectado vc pode tanto enviar como receber objetos, mas essa conexao tem que ficar bem desenhada, por exemplo o seguinte protocolo de aplicacao:
“o cliente escreve um objeto e le outro em seguida”

Se vc nao tiver um protocolo de aplicacao bem definido seu sistema trava, porque se vc fizer write object de um lado e ninguem fizer read object do outro o cara que fez o write vai ficar parado esperando!

Abraco,

[b]“Claudio” e “cv” obrigado pelas dicas e codigo…vou testar aqui e ver se consigo fazer…qualquer coisa retorno ao forum…

Obrigado!![/b]

:wink: :smiley:

Poh alguem poderia me ajudar…
Estou fazendo um trabalho com java…um web server e estou com algumas duvidas…na parte de socket e threads…alguem poderia dar uma luz pra mim…passa um fonte…!
vlw

Fala rapaz,

da uma olhada mais pra cima nesse topico e vc vai achar um cliente e um servidor multithread, como um web server.

A unica coisa que vc vai ter que fazer eh implementar a regra de http (request/response, cabecalhos e etc) como protocolo de aplicacao!

Olá.

Estou desenvolvendo uma aplicação de automação residencial para controle de dispositivos eletrônicos em Java pela porta USB usando a WEB no Windows XP.

Já desenvolvi a aplicação para rodar stand alone no computador da minha residência, no entanto, preciso que outro programa em Java em outro computador possa executar essa aplicação que tenho no computador da minha casa usando a WEB.

Estou tentando usar Socket, mas não estou conseguindo comunicar cliente/servidor via WEB, só no mesmo computador.

Estou usando o serviço do site NO-IP para conseguir um IP fixo já que o do VIRTUA que uso é dinâmico. Assim, quero fazer de servidor WEB o meu computador.

Parece que ó Virtua bloqueia a porta 80, por isso no NO-IP direcionei para a porta 1080 e já abri essa porta no firewall do meu micro.

O que posso fazer para rodar na WEB?

Por favor me ajudem.

Obrigado.

Isso é uma questão de firewall. O seu micro de casa tá ouvindo que porta? Porta 80? então, no firewall do seu micro você deve encaminhar (forward) a porta 80 interna para a porta 1080 externa. Senão, ao tentar acessar a porta não existirá nenhum servidor interno para ouvir.

Se seu micro for linux, tente uma lista de linux. Tenta isso:

Outra coisa, se cadastra porta no no-ip? que doidera é essa?

abraços,

Otávio

[quote=otaviofcs]Isso é uma questão de firewall. O seu micro de casa tá ouvindo que porta? Porta 80? então, no firewall do seu micro você deve encaminhar (forward) a porta 80 interna para a porta 1080 externa. Senão, ao tentar acessar a porta não existirá nenhum servidor interno para ouvir.

Se seu micro for linux, tente uma lista de linux. Tenta isso:

Outra coisa, se cadastra porta no no-ip? que doidera é essa?

abraços,

Otávio[/quote]

Obrigado por responder.

No no-ip o cadastro de porta é para redirecionamento quando a porta 80 estiver bloqueada (é o caso do Virtua).

Meu micro roda com Win XP e não achei opção para encaminhar (forward) a porta 80 interna para a porta 1080 externa.
Estou usando o Tomcat que fica configurado na porta 8080, por isso já mudei a porta externa cadastrada no no-IP para 8080.

Vou tentar mais um pouco achar uma solução.

Uma outra dúvida que tenho é se eu usar um Palm com wi-fi para acessar o servidor por uma aplicação J2ME, é mais fácil usar servlet ou socket?

Obrigado.

Opa,

A opcao de redirecionamento de portas nao eh do xp, eh do Roteador :wink: !

vc ja olhou a configuracao do seu roteador? normalmente se vc chama em um browser o ip dele ja vem a tela de administracao, ou entao vc tem que dar um telnet nele.

Pega o modelo dele e procura o manual na web, ai vc tem como dizer para ele transferir todas as conexoes entrantes para um micro especifico da sua rede.

Quanto ao desenvolvimento para o seu palm tem dezenas de coisas para se pesar nessa decisao, uma delas eh a dificuldade entre socket ou servlets. Faz o seguinte, abre outro topico com dicussao sobre o melhor (custo x qualidade x tempo) entre socket raw e servlets, isso vai atrair mais pessoas para a nossa discusao :).

[]'s

[quote=claudio]Opa,

A opcao de redirecionamento de portas nao eh do xp, eh do Roteador :wink: !

vc ja olhou a configuracao do seu roteador? normalmente se vc chama em um browser o ip dele ja vem a tela de administracao, ou entao vc tem que dar um telnet nele.

Pega o modelo dele e procura o manual na web, ai vc tem como dizer para ele transferir todas as conexoes entrantes para um micro especifico da sua rede.

Quanto ao desenvolvimento para o seu palm tem dezenas de coisas para se pesar nessa decisao, uma delas eh a dificuldade entre socket ou servlets. Faz o seguinte, abre outro topico com dicussao sobre o melhor (custo x qualidade x tempo) entre socket raw e servlets, isso vai atrair mais pessoas para a nossa discusao :).

[]'s[/quote]

Valeu, obrigado.

[quote=claudio]Fala galera, ai vai uma implementacao que usei em um curso: …
[/quote]
Cara, valeu muito, salvou minha vida,rs.

O GUJ eh foda mesmo hein?rs

Valeu.

Dá uma lida aqui: http://www.guj.com.br/posts/list/136538.java#735860
E aqui: http://www.guj.com.br/posts/list/15/74218.java#506163

E uma dica… a menos que queira ter muita dor de cabeça, não use o ObjectInputStream ou o ObjectOutputStream. Além de enviar dados demais, eles costumam a apresentar problemas sérios de memória e performance.

Olá, eu também estou com dúvidas em conectar meu socket com a minha classe swing. Por exemplo, estou desenvolvendo um sistema onde o administrador cadastra um funcionário (na sua sala de escritório) e quando o restante da equipe da empresa (gerentes, rh, enfim) forem visualizar a lista de funcionário cadastrados, o nome desse funcionário ja deve aparecer pra eles. Seria como se fosse ATUALIZAR DADOS. Consigo fazer todo o cadastro com perfeição, o problema está na hora da exibição para os outros terminais que nao estou conseguindo fazer. Vou enviar parte do meu código, se alguem puder me ajudar, serei grata. Bjoss

*****Formulario SWING

[code]view plaincopy to clipboardprint?

package Visao;  
  
import Controlador.FuncionarioCC;  
import descartar.ConexaoBanco;  
import DAO.FuncionarioDAO;  
import Modelo.Funcionario;  
import Socket.*;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.List;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
import javax.swing.JOptionPane;  
import javax.swing.table.DefaultTableModel;  
  
/** 
* @author Rebecca Dias 
*/  
public class FormFuncionario extends javax.swing.JFrame {  
      private ClienteData cliente;  
   // private final String ip;  
    /** 
     * Creates new form FormFuncionario 
     */  
    public FormFuncionario(){  
       // s = new ServidorData();    
        cliente = new ClienteData();  
      //  cliente.start();  
        initComponents();    
        preencherTabela();  
     //   cliente = new ClienteData();  
     //   cliente.start();  
    }  
      
    /** 
     * This method is called from within the constructor to initialize the form. 
     * WARNING: Do NOT modify this code. The content of this method is always 
     * regenerated by the Form Editor. 
     */  
    @SuppressWarnings("unchecked")  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                            
    private void initComponents() {  
  
        jScrollPane3 = new javax.swing.JScrollPane();  
        jTree1 = new javax.swing.JTree();  
        jTabbedPane1 = new javax.swing.JTabbedPane();  
        jPanel3 = new javax.swing.JPanel();  
        LblNomeFuncionario = new javax.swing.JLabel();  
        TxtNomeFuncionario = new javax.swing.JTextField();  
        LblCpfFuncionario = new javax.swing.JLabel();  
        LblEmailFuncionario = new javax.swing.JLabel();  
        TxtEmailFuncionario = new javax.swing.JTextField();  
        LblSalarioFuncionario = new javax.swing.JLabel();  
        LblDescricaoFuncionario = new javax.swing.JLabel();  
        jScrollPane2 = new javax.swing.JScrollPane();  
        TxtDescricaoFuncionario = new javax.swing.JTextArea();  
        LblFuncaoFuncionario = new javax.swing.JLabel();  
        DdlFuncaoFuncionario = new javax.swing.JComboBox();  
        BtnSalvarFuncionario = new javax.swing.JButton();  
        TxtCpfFuncionario = new javax.swing.JFormattedTextField();  
        TxtSalarioFuncionario = new javax.swing.JTextField();  
        LblIdFuncionario = new javax.swing.JLabel();  
        jScrollPane1 = new javax.swing.JScrollPane();  
        jTable1 = new javax.swing.JTable();  
        jPanel1 = new javax.swing.JPanel();  
        LblCadastroFuncionario = new javax.swing.JLabel();  
        jPanel2 = new javax.swing.JPanel();  
        LblFiltroFuncionario = new javax.swing.JLabel();  
        TxtFiltroFuncionario = new javax.swing.JTextField();  
        BtnFiltrarFuncionario = new javax.swing.JButton();  
        BtnListarFuncionario = new javax.swing.JButton();  
        BtnIncluirFuncionario = new javax.swing.JButton();  
        BtnExcluirFuncionario = new javax.swing.JButton();  
  
        jScrollPane3.setViewportView(jTree1);  
  
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);  
        setTitle("Cadastro de Funcionário");  
  
        jTabbedPane1.setPreferredSize(new java.awt.Dimension(440, 390));  
  
        jPanel3.setPreferredSize(new java.awt.Dimension(413, 210));  
  
        LblNomeFuncionario.setText("Nome");  
  
        TxtNomeFuncionario.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                TxtNomeFuncionarioActionPerformed(evt);  
            }  
        });  
  
        LblCpfFuncionario.setText("CPF");  
  
        LblEmailFuncionario.setText("E-mail");  
  
        LblSalarioFuncionario.setText("Salário");  
  
        LblDescricaoFuncionario.setText("Descrição");  
  
        TxtDescricaoFuncionario.setColumns(20);  
        TxtDescricaoFuncionario.setRows(5);  
        jScrollPane2.setViewportView(TxtDescricaoFuncionario);  
  
        LblFuncaoFuncionario.setText("Função");  
  
        DdlFuncaoFuncionario.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Caixa", "Garçon", "Cozinheiro" }));  
  
        BtnSalvarFuncionario.setText("Salvar");  
        BtnSalvarFuncionario.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                BtnSalvarFuncionarioActionPerformed(evt);  
            }  
        });  
  
        try {  
            TxtCpfFuncionario.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("###.###.###-##")));  
        } catch (java.text.ParseException ex) {  
            ex.printStackTrace();  
        }  
  
        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);  
        jPanel3.setLayout(jPanel3Layout);  
        jPanel3Layout.setHorizontalGroup(  
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(jPanel3Layout.createSequentialGroup()  
                .addContainerGap()  
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)  
                    .addComponent(BtnSalvarFuncionario)  
                    .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)  
                        .addGroup(jPanel3Layout.createSequentialGroup()  
                            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                                .addGroup(jPanel3Layout.createSequentialGroup()  
                                    .addComponent(LblNomeFuncionario)  
                                    .addGap(18, 18, 18)  
                                    .addComponent(TxtNomeFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE)  
                                    .addGap(18, 18, 18)  
                                    .addComponent(LblCpfFuncionario))  
                                .addGroup(jPanel3Layout.createSequentialGroup()  
                                    .addComponent(LblEmailFuncionario)  
                                    .addGap(18, 18, 18)  
                                    .addComponent(TxtEmailFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE)  
                                    .addGap(63, 63, 63)  
                                    .addComponent(LblSalarioFuncionario)))  
                            .addGap(18, 18, 18)  
                            .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                                .addComponent(TxtCpfFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)  
                                .addComponent(TxtSalarioFuncionario, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)))  
                        .addGroup(jPanel3Layout.createSequentialGroup()  
                            .addComponent(LblDescricaoFuncionario)  
                            .addGap(27, 27, 27)  
                            .addComponent(LblIdFuncionario)  
                            .addGap(144, 144, 144)  
                            .addComponent(LblFuncaoFuncionario)  
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)  
                            .addComponent(DdlFuncaoFuncionario, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))  
                        .addComponent(jScrollPane2)))  
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))  
        );  
        jPanel3Layout.setVerticalGroup(  
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(jPanel3Layout.createSequentialGroup()  
                .addContainerGap()  
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(LblNomeFuncionario)  
                    .addComponent(TxtNomeFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                    .addComponent(LblCpfFuncionario)  
                    .addComponent(TxtCpfFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(LblEmailFuncionario)  
                    .addComponent(TxtEmailFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                    .addComponent(LblSalarioFuncionario)  
                    .addComponent(TxtSalarioFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(LblFuncaoFuncionario)  
                    .addComponent(DdlFuncaoFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)  
                    .addComponent(LblDescricaoFuncionario)  
                    .addComponent(LblIdFuncionario))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)  
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)  
                .addGap(18, 18, 18)  
                .addComponent(BtnSalvarFuncionario)  
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))  
        );  
  
        jTabbedPane1.addTab("Cadastro", jPanel3);  
  
        jTable1.setModel(new javax.swing.table.DefaultTableModel(  
            new Object [][] {  
                {null, null, null, null, null, "", null},  
                {null, null, null, null, null, null, null},  
                {null, null, null, null, null, null, null},  
                {null, null, null, null, null, null, null}  
            },  
            new String [] {  
                "Nome", "CPF", "Função", "Título 4", "Título 5", "Título 6", "Título 7"  
            }  
        ) {  
            Class[] types = new Class [] {  
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class  
            };  
  
            public Class getColumnClass(int columnIndex) {  
                return types [columnIndex];  
            }  
        });  
        jTable1.addMouseListener(new java.awt.event.MouseAdapter() {  
            public void mouseClicked(java.awt.event.MouseEvent evt) {  
                jTable1MouseClicked(evt);  
            }  
        });  
        jScrollPane1.setViewportView(jTable1);  
        jTable1.getColumnModel().getColumn(3).setMinWidth(0);  
        jTable1.getColumnModel().getColumn(3).setPreferredWidth(0);  
        jTable1.getColumnModel().getColumn(3).setMaxWidth(0);  
        jTable1.getColumnModel().getColumn(4).setMinWidth(0);  
        jTable1.getColumnModel().getColumn(4).setPreferredWidth(0);  
        jTable1.getColumnModel().getColumn(4).setMaxWidth(0);  
        jTable1.getColumnModel().getColumn(5).setMinWidth(0);  
        jTable1.getColumnModel().getColumn(5).setPreferredWidth(0);  
        jTable1.getColumnModel().getColumn(5).setMaxWidth(0);  
        jTable1.getColumnModel().getColumn(6).setMinWidth(0);  
        jTable1.getColumnModel().getColumn(6).setPreferredWidth(0);  
        jTable1.getColumnModel().getColumn(6).setMaxWidth(0);  
  
        jTabbedPane1.addTab("Lista Funcionários", jScrollPane1);  
  
        getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);  
  
        LblCadastroFuncionario.setFont(new java.awt.Font("Arial", 1, 18));  
        LblCadastroFuncionario.setText("Cadastro de Funcionário");  
  
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);  
        jPanel1.setLayout(jPanel1Layout);  
        jPanel1Layout.setHorizontalGroup(  
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()  
                .addContainerGap(101, Short.MAX_VALUE)  
                .addComponent(LblCadastroFuncionario)  
                .addGap(97, 97, 97))  
        );  
        jPanel1Layout.setVerticalGroup(  
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(jPanel1Layout.createSequentialGroup()  
                .addContainerGap()  
                .addComponent(LblCadastroFuncionario)  
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))  
        );  
  
        getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_START);  
  
        LblFiltroFuncionario.setText("Filtrar por");  
  
        BtnFiltrarFuncionario.setText("Filtrar");  
  
        BtnListarFuncionario.setText("Listar");  
  
        BtnIncluirFuncionario.setText("Incluir");  
  
        BtnExcluirFuncionario.setText("Excluir");  
        BtnExcluirFuncionario.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                BtnExcluirFuncionarioActionPerformed(evt);  
            }  
        });  
  
        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);  
        jPanel2.setLayout(jPanel2Layout);  
        jPanel2Layout.setHorizontalGroup(  
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(jPanel2Layout.createSequentialGroup()  
                .addContainerGap()  
                .addComponent(LblFiltroFuncionario)  
                .addGap(18, 18, 18)  
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
                    .addComponent(TxtFiltroFuncionario, javax.swing.GroupLayout.DEFAULT_SIZE, 326, Short.MAX_VALUE)  
                    .addGroup(jPanel2Layout.createSequentialGroup()  
                        .addComponent(BtnFiltrarFuncionario)  
                        .addGap(18, 18, 18)  
                        .addComponent(BtnListarFuncionario)  
                        .addGap(18, 18, 18)  
                        .addComponent(BtnIncluirFuncionario)  
                        .addGap(18, 18, 18)  
                        .addComponent(BtnExcluirFuncionario)  
                        .addGap(0, 28, Short.MAX_VALUE)))  
                .addContainerGap())  
        );  
        jPanel2Layout.setVerticalGroup(  
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGroup(jPanel2Layout.createSequentialGroup()  
                .addContainerGap()  
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(LblFiltroFuncionario)  
                    .addComponent(TxtFiltroFuncionario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))  
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)  
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)  
                    .addComponent(BtnFiltrarFuncionario)  
                    .addComponent(BtnListarFuncionario)  
                    .addComponent(BtnIncluirFuncionario)  
                    .addComponent(BtnExcluirFuncionario))  
                .addContainerGap(15, Short.MAX_VALUE))  
        );  
  
        getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_END);  
  
        pack();  
    }// </editor-fold>                          
  
    private void TxtNomeFuncionarioActionPerformed(java.awt.event.ActionEvent evt) {                                                     
        // TODO add your handling code here:  
    }                                                    
  
    private void BtnSalvarFuncionarioActionPerformed(java.awt.event.ActionEvent evt) {                                                       
        try {  
            Funcionario objFuncionario = new Funcionario();  
            FuncionarioCC objFuncionarioCC = new FuncionarioCC();  
          
            objFuncionario.setNome(TxtNomeFuncionario.getText());  
            objFuncionario.setCpf(TxtCpfFuncionario.getText());  
            objFuncionario.setEmail(TxtEmailFuncionario.getText());  
            objFuncionario.setSalario(Double.parseDouble(TxtSalarioFuncionario.getText()));  
            objFuncionario.setDescricao(TxtDescricaoFuncionario.getText());  
            //DdlFuncaoFuncionario é referente ao campo tipo do banco  
            objFuncionario.setTipo((int)DdlFuncaoFuncionario.getSelectedIndex());  
              
            objFuncionarioCC.SalvarFuncionario(objFuncionario);  
              
        } catch (Exception ex) {  
            Logger.getLogger(FormFuncionario.class.getName()).log(Level.SEVERE, null, ex);  
        }  
    }                                                      
  
    private void BtnExcluirFuncionarioActionPerformed(java.awt.event.ActionEvent evt) {                                                        
        FuncionarioCC    objFuncionarioCC = new FuncionarioCC();  
        Funcionario     objFuncionario  = new Funcionario();  
  
        objFuncionario = this.PreencheObjeto(objFuncionario);  
          
        String excluir = "Deseja excluir: " + TxtNomeFuncionario.getText();  
        int opcao = JOptionPane.showConfirmDialog(null, excluir, "Exclusão", JOptionPane.YES_NO_OPTION);  
          
        if(opcao == JOptionPane.YES_OPTION)  
        {  
            try {  
                objFuncionarioCC.RemoverFuncionario(objFuncionario.getIdFuncionario());  
                  
                this.preencherTabela();  
                JOptionPane.showMessageDialog(null, "Registro excluído com sucesso.");  
                jTabbedPane1.setSelectedComponent(jScrollPane1);  
                  
            } catch (SQLException ex) {  
                Logger.getLogger(FormFuncionario.class.getName()).log(Level.SEVERE, null, ex);  
            } catch (ClassNotFoundException ex) {  
                Logger.getLogger(FormFuncionario.class.getName()).log(Level.SEVERE, null, ex);  
            }  
        }  
    }                                                       
  
    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                       
        int linha = jTable1.getSelectedRow();  
          
        TxtNomeFuncionario      .setText(jTable1.getValueAt(linha, 0).toString());  
        TxtCpfFuncionario       .setText(jTable1.getValueAt(linha, 1).toString());  
        DdlFuncaoFuncionario    .setSelectedIndex(Integer.parseInt(jTable1.getValueAt(linha, 2).toString()));  
        TxtEmailFuncionario     .setText(jTable1.getValueAt(linha, 3).toString());  
        TxtSalarioFuncionario   .setText(jTable1.getValueAt(linha, 4).toString());  
        TxtDescricaoFuncionario .setText(jTable1.getValueAt(linha, 5).toString());  
        LblIdFuncionario        .setText(jTable1.getValueAt(linha, 6).toString());  
                  
        jTabbedPane1.setSelectedComponent(jPanel3);  
    }                                      
  
    private Funcionario PreencheObjeto(Funcionario objFuncionario)  
    {  
        objFuncionario.setIdFuncionario(Integer.parseInt(LblIdFuncionario.getText()));  
        objFuncionario.setNome(TxtNomeFuncionario.getText());  
        objFuncionario.setCpf(TxtCpfFuncionario.getText());  
        objFuncionario.setEmail(TxtEmailFuncionario.getText());  
        objFuncionario.setSalario(Double.parseDouble(TxtSalarioFuncionario.getText()));  
        objFuncionario.setTipo(DdlFuncaoFuncionario.getSelectedIndex());  
        objFuncionario.setDescricao(TxtDescricaoFuncionario.getText());  
  
//        if(!TxtCodSocio.getText().trim().equals(""))  
//            objCliente.setCodSocio(Integer.parseInt(TxtCodSocio.getText()));  
//        else  
//            objCliente.setCodSocio(0);  
          
        return objFuncionario;  
    }  
      
    public void preencherTabela()  
    {  
       //  s = new ServidorData();    
        jTable1.getColumnModel().getColumn(0);//.setPreferredWidth(WIDTH);  
        jTable1.getColumnModel().getColumn(1);  
        jTable1.getColumnModel().getColumn(2);  
          
        //Colunas invisíveis  
        jTable1.getColumnModel().getColumn(3).setMaxWidth(0);  
        jTable1.getColumnModel().getColumn(4).setMaxWidth(0);  
        jTable1.getColumnModel().getColumn(5).setMaxWidth(0);  
        jTable1.getColumnModel().getColumn(6).setMaxWidth(0);  
  
          
        DefaultTableModel modelo = (DefaultTableModel)jTable1.getModel();  
        modelo.setNumRows(0);  
          
        try  
        {  
            FuncionarioCC objFuncionarioCC = new FuncionarioCC();   
  
            List<Funcionario> lista = objFuncionarioCC.ListarFuncionario();  
            int tamanho = lista.size();  
  
            for (int i = 0; i < tamanho; i++)  
            {  
                Funcionario objFuncionario = lista.get(i);  
                modelo.addRow(new Object[] {objFuncionario.getNome(), objFuncionario.getCpf(),objFuncionario.getTipo(),  
                                            objFuncionario.getEmail(), objFuncionario.getSalario(),objFuncionario.getDescricao(),  
                                            objFuncionario.getIdFuncionario()});  
            }  
        }  
        catch(Exception erro)  
        {  
            JOptionPane.showMessageDialog(null,"Erro ao listar itens" + erro);  
        }  
    }  
      
    /** 
     * @param args the command line arguments 
     */  
    public static void main(String args[]) {  
        /* 
         * Set the Nimbus look and feel 
         */  
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">  
        /* 
         * If Nimbus (introduced in Java SE 6) is not available, stay with the 
         * default look and feel. For details see 
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */  
        try {  
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {  
                if ("Nimbus".equals(info.getName())) {  
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());  
                    break;  
                }  
            }  
        } catch (ClassNotFoundException ex) {  
            java.util.logging.Logger.getLogger(FormFuncionario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  
        } catch (InstantiationException ex) {  
            java.util.logging.Logger.getLogger(FormFuncionario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  
        } catch (IllegalAccessException ex) {  
            java.util.logging.Logger.getLogger(FormFuncionario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {  
            java.util.logging.Logger.getLogger(FormFuncionario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  
        }  
        //</editor-fold>  
  
        /* 
         * Create and display the form 
         */  
        java.awt.EventQueue.invokeLater(new Runnable() {  
  
            public void run() {  
                    new FormFuncionario().setVisible(true);  
            }  
        });  
    }  
    // Variables declaration - do not modify                       
    private javax.swing.JButton BtnExcluirFuncionario;  
    private javax.swing.JButton BtnFiltrarFuncionario;  
    private javax.swing.JButton BtnIncluirFuncionario;  
    private javax.swing.JButton BtnListarFuncionario;  
    private javax.swing.JButton BtnSalvarFuncionario;  
    private javax.swing.JComboBox DdlFuncaoFuncionario;  
    private javax.swing.JLabel LblCadastroFuncionario;  
    private javax.swing.JLabel LblCpfFuncionario;  
    private javax.swing.JLabel LblDescricaoFuncionario;  
    private javax.swing.JLabel LblEmailFuncionario;  
    private javax.swing.JLabel LblFiltroFuncionario;  
    private javax.swing.JLabel LblFuncaoFuncionario;  
    private javax.swing.JLabel LblIdFuncionario;  
    private javax.swing.JLabel LblNomeFuncionario;  
    private javax.swing.JLabel LblSalarioFuncionario;  
    private javax.swing.JFormattedTextField TxtCpfFuncionario;  
    private javax.swing.JTextArea TxtDescricaoFuncionario;  
    private javax.swing.JTextField TxtEmailFuncionario;  
    private javax.swing.JTextField TxtFiltroFuncionario;  
    private javax.swing.JTextField TxtNomeFuncionario;  
    private javax.swing.JTextField TxtSalarioFuncionario;  
    private javax.swing.JPanel jPanel1;  
    private javax.swing.JPanel jPanel2;  
    private javax.swing.JPanel jPanel3;  
    private javax.swing.JScrollPane jScrollPane1;  
    private javax.swing.JScrollPane jScrollPane2;  
    private javax.swing.JScrollPane jScrollPane3;  
    private javax.swing.JTabbedPane jTabbedPane1;  
    private javax.swing.JTable jTable1;  
    private javax.swing.JTree jTree1;  
    // End of variables declaration                     
}  

[/code][b]

**************************************Socket Cliente[/b]

[code]view plaincopy to clipboardprint?

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/  
package Socket;  
  
/** 
* 
* @author Rebecca Dias 
*/  
  
import Visao.*;  
import java.io.IOException;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
import java.net.Socket;  
import java.net.SocketException;  
import java.net.UnknownHostException;  
import java.util.Date;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
  
  
public class ClienteData {  
    private Socket connect;//*  
    private ObjectOutputStream out;//*  
    private ObjectInputStream in;//*  
    private int porta;//*  
    private String ip;//*  
    private FormFuncionario tela;//*  
//   private TelaMapa mapa;  
    private int tipo;//*  
      
     public ClienteData(FormFuncionario tela, String ip, int porta, int tipo)  
    {  
        this.ip = ip;  
        this.porta = porta;  
        this.tela = tela;  
      //  iniciarConexao();  
        this.tipo = tipo;  
    }  
  
    public ClienteData() {  
        //throw new UnsupportedOperationException("Not yet implemented");  
    }  
      public void iniciarConexao()  
    {  
        try  
        {  
            this.connect = new Socket(ip, porta);//inicia a conexao na porta 9047 e no ip informado  
            this.out = new ObjectOutputStream(this.connect.getOutputStream());  
            this.in = new ObjectInputStream(this.connect.getInputStream());  
  
        }  
        catch(SocketException e)  
        {  
            System.out.println("Servidor nao encontrado!");  
            System.exit(1);  
        }  
        catch(Exception e)  
        {  
            System.out.println("iniciarConexao - " + e.getMessage());  
            System.exit(1);  
        }  
    }  
    public void closeConnection()  
    {  
        try  
        {  
            this.in.close();//fecha a conexao com o socket do servidor  
            this.out.close();  
            this.connect.close();  
        }  
        catch(Exception e)  
        {  
            System.out.println("closeConnection: " + e.getMessage());  
            System.exit(1);  
        }  
    }  
  
    public static void main(String args[]) throws ClassNotFoundException {  
        try {  
            while(true) {  
                // cria o socket  
                Socket s = new Socket("localhost", 87);  
                // cria um stream de entrada  
                ObjectInputStream entrada = new ObjectInputStream(s.getInputStream());  
                // obtem a data driada remotamente  
                FormFuncionario tela = (FormFuncionario) entrada.readObject();  
             //   Date data = (Date)entrada.readObject();  
             //   System.out.println("Data : " + tela.toString());  
                // fecha o stream  
                entrada.close();  
                // fecha o socket  
                s.close();  
            }  
        } catch (UnknownHostException ex) {  
            Logger.getLogger(ClienteData.class.getName()).log(Level.SEVERE, null, ex);  
        } catch (IOException ex) {  
            Logger.getLogger(ClienteData.class.getName()).log(Level.SEVERE, null, ex);  
        }  
  
  
  
    }  
  
    public void start() {  
     //   throw new UnsupportedOperationException("Not yet implemented");  
    }  
}  

[/code]

*******SERVIDORSOCKET

[code]view plaincopy to clipboardprint?

package Socket;  
  
import java.io.IOException;  
import java.net.ServerSocket;  
import java.net.Socket;  
  
  
  
public class ServidorData  {  
  
    public static void main (String args[]) {  
        try{  
            // cria um servidor de socket  
            ServerSocket server = new ServerSocket(87);  
            int cont = 0;  
            while(true) { // rodando indefinidamente  
                System.out.println("esperando o cliente " + cont++);  
                // espera por requisições. retorna o socket do cliente que  
                // solicitou uma conexao  
                Socket s = server.accept();  
  
                // processa a requisição em uma thread separada e volta a esperar  
                // requisicoes  
                ThreadProcessa t = new ThreadProcessa(s);  
                Thread thread = new Thread(t);  
                thread.start();  
            }  
  
        } catch (IOException ex){  
            ex.printStackTrace();  
        }  
    }  
  
    
}  

[/code]
******************THREAD

[code]view plaincopy to clipboardprint?

package Socket;  
  
import Visao.*;  
import java.io.IOException;  
import java.io.ObjectOutputStream;  
import java.net.Socket;  
import java.util.Date;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
  
public class ThreadProcessa implements Runnable {  
    Socket s;  
  
    public ThreadProcessa(Socket s) {  
        this.s = s;  
    }  
  
    public void run() {  
        try {  
            // cria a data a ser enviada  
            FormFuncionario tela = new FormFuncionario();  
          //  Date data = new Date();  
            // cria o stream de saída  
            ObjectOutputStream saida;  
            // espera 4s (simula processamento pesado)  
            Thread.sleep(4000);  
            // obtem o stream do socket do cliente  
            saida = new ObjectOutputStream(s.getOutputStream());  
            // envia a data via stream  
            saida.writeObject(tela);  
            // fecha o stream  
            saida.flush();  
            saida.close();  
            // fecha o socket  
            s.close();  
        } catch (IOException ex) {  
            Logger.getLogger(ServidorData.class.getName()).log(Level.SEVERE, null, ex);  
        } catch (InterruptedException ex) {  
                Logger.getLogger(ServidorData.class.getName()).log(Level.SEVERE, null, ex);  
        }  
    }  

[/code]

Se alguem puder me ajudar, como tenho que fazer essa conexao com o swing, serei grata!!!

Leia os links já indicados por mim no post anterior ao seu.