2015-05-14 110 views
0

我編寫了以下客戶端,它僅連接到本地主機,即連接到本機的ip,但不連接到在不同計算機上的不同ip上運行的服務器。 我連接到外部時遇到的錯誤是連接被拒絕 如何使其連接到本地主機之外?我的聊天客戶端只連接到本地主機

我的代碼如下

public ChatClient(JTextField address, JTextField port, JTextField user, 
     JTextField text, JTextArea tapane3, JTextArea tapane4) { 
    // TODO Auto-generated constructor stub 
    this.address=address; 
    this.user=user; 
    this.text=text; 
    this.port=port; 
    add=address.getText(); 
    textarea=tapane3; 
    showusers=tapane4; 
} 

public void sendToPort(String str) throws IOException { 
    Socket socket = null; 

    //String str = "Hello World"; 
    try { 
     out.write(str, 0, str.length()); 
     out.flush(); 
    } catch (IOException e) { 
     System.err.print(e); 
    } finally { 

    } 

} 

@SuppressWarnings("deprecation") 
@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 

    if(e.getActionCommand().equals("Send")) 
    { 

     try { 
      textarea.append(SendMessage()+"\n"); 
      System.out.println(SendMessage()); 
      sendToPort("x"); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

    } 

    else if(e.getActionCommand().equals("Connect")) 
    { 

     try { 
      String prt=port.getText(); 

      cs = new Socket(add, Integer.parseInt(prt)); 
      out =new OutputStreamWriter(cs.getOutputStream(), "UTF-8"); 

      showusers.setText(user.getText()); 

      //sendToPort(Integer.parseInt(prt), Address); 




     } catch (NumberFormatException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (UnknownHostException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 


    } 
    else if(e.getActionCommand().equals("Disconnect")) 
    { 


     try { 
      cs.close(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 


    } 
} 

public void Connect() throws NumberFormatException, UnknownHostException, IOException { 
    // TODO Auto-generated method stub 



} 

public String SendMessage() { 
    // TODO Auto-generated method stub 
    { 


     DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
     Date date = new Date(); 
     String getdate=(dateFormat.format(date)); 

      String content = text.getText();     
      String from = String.format(user.getText()); 
      String all = "START:" + getdate + ":" + from + ":"+"MESSAGE:" + content + ":END"; 
      //textarea.setText(all); 
      try { 
      out.write(all); 
      out.flush(); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


      return all; 

} 
+1

嘗試減肥。您應該只需要一些線路連接到服務器併發送一行文本。編寫一個簡單的程序(http://stackoverflow.com/help/mcve),看看它是否有效。您還應該告訴我們,當您嘗試連接到不同的機器時會發生什麼情況,您會得到什麼樣的錯誤。 – dcsohl

+0

它只是說連接被拒絕,但是當我連接到與本地主機在同一臺機器上運行的服務器時,它會連接併發送和接收消息 – Splasher

+0

您是否試過簡單的程序?您需要一行代碼來創建套接字,一個獲取OutputStreamWriter,一個通過它寫入示例消息。 Plus樣板異常處理和關閉資源。真的很簡單,可能會幫助你解決問題。不幸的是,這裏沒有人可以運行你的代碼並找出有什麼問題......(因爲我們沒有你的服務器)。 – dcsohl

回答

-1

首先,你需要使用本機的計算機的公網IP,而不是你的本地主機。 https://www.whatismyip.com/

此外,您需要端口轉發您的端口。 你可以閱讀和學習如何在這裏: http://portforward.com/

+0

「嘗試搜索谷歌」不是一個StackOverflow答案。回答這個問題或者不要,但是這沒有幫助。 – dcsohl

+0

@dcsohl好吧,你是對的。我編輯了答案 – Amirag

+0

目前還不清楚這是否有幫助。你爲什麼認爲端口轉發是必要的? – dcsohl