我編寫了以下客戶端,它僅連接到本地主機,即連接到本機的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;
}
嘗試減肥。您應該只需要一些線路連接到服務器併發送一行文本。編寫一個簡單的程序(http://stackoverflow.com/help/mcve),看看它是否有效。您還應該告訴我們,當您嘗試連接到不同的機器時會發生什麼情況,您會得到什麼樣的錯誤。 – dcsohl
它只是說連接被拒絕,但是當我連接到與本地主機在同一臺機器上運行的服務器時,它會連接併發送和接收消息 – Splasher
您是否試過簡單的程序?您需要一行代碼來創建套接字,一個獲取OutputStreamWriter,一個通過它寫入示例消息。 Plus樣板異常處理和關閉資源。真的很簡單,可能會幫助你解決問題。不幸的是,這裏沒有人可以運行你的代碼並找出有什麼問題......(因爲我們沒有你的服務器)。 – dcsohl