2014-02-13 210 views
-3

我想在java中創建一個聊天應用程序,但是當我無法發送到另一臺機器時,我遇到了問題。 這裏是我的代碼部分:在java中的聊天應用程序

這是我的類客戶:

public class EnvioSocket { 
    public static boolean enviarSocket(String nome, String ip, int porta, 
     String mensagem) { 
     String dados = nome + " : " + mensagem; 
     try { 
      Socket socket = new Socket(ip, porta); 
      OutputStream outToServer = socket.getOutputStream(); 
      DataOutputStream out = new DataOutputStream(outToServer); 
      out.writeUTF(dados); 
      out.close(); 
      socket.close(); 

     } catch (UnknownHostException e) { 
      JOptionPane.showMessageDialog(null, e.getMessage()); 
      return false; 
     } catch (IOException e) { 
      JOptionPane.showMessageDialog(null, e.getMessage()); 
      return false; 
     } 
     return true; 
    } 

}

這是我的類服務器:

public class ServidorThread implements Runnable { 
    private JTextArea menssage; 

    public ServidorThread(JTextArea menssage) { 
     this.menssage = menssage; 
    } 
    @Override 
    public void run() { 
     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(Porta.PORTA); 
      while (true) { 
       Socket acceptedSocket = serverSocket.accept(); 
       DataInputStream in = new DataInputStream(
        acceptedSocket.getInputStream()); 
       String menssage = in.readUTF(); 
       this.menssage.append(DateUtils.dateToString(new Date(), "dd/MM/yyyy HH:mm") + " " + menssage + "\n"); 
       in.close(); 
       acceptedSocket.close(); 
      } 
     } catch (IOException e) { 
     JOptionPane.showMessageDialog(null, e.getMessage()); 
     } 
    } 
} 



define a port to socket 
public final class Porta { 
    private Porta() { 
    } 

    public static final int PORTA = 6066; 
} 

我只能發信息給我自己的電腦。我怎樣才能解決這個問題? 我開始我的課程,內部我的課程,使GUI。

+9

您應該首先刪除所有與Swing相關的代碼。您的問題與Swing無關,應該在調試時進行測試,以隔離分散注意力的非相關代碼。此外,在真正的聊天應用程序中,用戶界面代碼將與套接字通信完全分離,所以現在不妨開始這樣做。 –

+0

服務器似乎沒有向任何人發送任何東西。它只接受連接,接收第一條消息並再次關閉套接字。 – Philipp

+3

現在,你的代碼比大多數人想要閱讀的要多得多。考慮將它降低到[SSCCE](http://www.sscce.org/),使我們更容易 –

回答

1

看起來您已將服務器設置爲正確,但您的客戶端似乎無法連接到它。您需要創建一個將連接到服務器套接字的套接字。這個套接字可以讓你通過I/O流發送數據。

Java's tutorial, complete with code examples