ServidorHTTP

Alguem poderia me ajudar.

Estou tentanto executar esse código apresentado na revista java edição 18, mas o mesmo apresenta o seguinte erro.

### Criando servidor na porta 8080
Exception in thread “main” java.net.BindException: Address already
ind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
at jm18.pentefino.ServidorHTTP.<init>(ServidorHTTP.java:44)
at jm18.pentefino.ServidorHTTP.main(ServidorHTTP.java:14)

Abaixo vai o código :


package jm18.pentefino;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

// OBS&#58; tratamento de excecoes ignorado
public class ServidorHTTP &#123;

  private ServerSocket serverSocket = null;

  public static void main&#40;String&#91;&#93; args&#41; throws Exception &#123;
    int porta = Integer.parseInt&#40;args&#91;0&#93;&#41;;
    ServidorHTTP servidor = new ServidorHTTP&#40;porta&#41;;
    servidor.trataConexao&#40;&#41;;

  &#125;

  public void trataConexao&#40;&#41; throws Exception &#123;
    Socket socket = this.serverSocket.accept&#40;&#41;;
    String cliente = socket.getInetAddress&#40;&#41;.getHostName&#40;&#41;;
    System.out.println&#40;&quot;### Conexao estabelecida&quot;&#41;;
    InputStream is = socket.getInputStream&#40;&#41;;
    BufferedReader br = new BufferedReader&#40;new InputStreamReader&#40;is&#41;&#41;;
    String linha = null;
    System.out.println&#40;&quot;### Recebendo dados&#58;&quot;&#41;;
    do &#123;
      linha = br.readLine&#40;&#41;;
      System.out.println&#40;linha&#41;;
    &#125; while &#40;linha != null &amp;&amp; linha.trim&#40;&#41;.length&#40;&#41; &gt; 0&#41;;
    System.out.println&#40;&quot;### Dados ok&quot;&#41;;
    OutputStream os = socket.getOutputStream&#40;&#41;;
    BufferedWriter bw = new BufferedWriter&#40;new OutputStreamWriter&#40;os&#41;&#41;;
    System.out.println&#40;&quot;### Enviando dados&#58;&quot;&#41;;
    bw.write&#40;&quot;Requisicao tratada com sucesso!&quot;&#41;;
    bw.flush&#40;&#41;;
    System.out.println&#40;&quot;### Dados ok&quot;&#41;;
    is.close&#40;&#41;;
    os.close&#40;&#41;;
  &#125;

  public ServidorHTTP&#40;int porta&#41; throws Exception &#123;
    System.out.println&#40;&quot;### Criando servidor na porta &quot; + porta&#41;;
    serverSocket = new ServerSocket&#40;porta&#41;;
  &#125;
&#125;

Como argumento na linha de comando, eu passo a porta do servidor 8080, no caso o tomcat.[/quote]

Se o Tomcat estiver executando (ou qualquer outra coisa na porta 8080), não vai funcionar mesmo, pois essa classe inicia um socket servidor na porta 8080, se ela já estiver sendo usada, lança essa exceção aí… para o Tomcat e tenta de novo ou usa outra porta!

Sim, mas quando eu não dou start no Tomcat o mesmo fica travado, na seguinte menssagem :

###Criando servidor na porta 8080

Não é que ele fica travado, quando você chama o metodo accept() ele fica aguardando uma conexão, e é exatamente essa a função do servidor, ficar aguardando…

Você tem que fazer uma aplicação cliente pra se conectar nele!

No meu blog tem um exemplo de chat que talvez te ajude com isso!

http://jairelton.com

Olá Jair.
Tentei compila sua aplicação OpenChat, mas o mesmo está dando erro em todas as classes. Nehuma classe compila…
Abraços