Java 我的聊天客户端仅连接到本地主机
我编写了以下客户端,它只连接到本地主机,连接机器的ip,而不是运行在不同机器上不同ip上的服务器。 连接到外部时出现的错误是连接被拒绝 如何使其连接到本地主机之外 我的代码如下Java 我的聊天客户端仅连接到本地主机,java,sockets,client,localhost,chat,Java,Sockets,Client,Localhost,Chat,我编写了以下客户端,它只连接到本地主机,连接机器的ip,而不是运行在不同机器上不同ip上的服务器。 连接到外部时出现的错误是连接被拒绝 如何使其连接到本地主机之外 我的代码如下 public ChatClient(JTextField address, JTextField port, JTextField user, JTextField text, JTextArea tapane3, JTextArea tapane4) { // TODO Auto-generat
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;
}
首先,您需要使用计算机的公共ip,而不是本地主机。 此外,您需要将端口向前移动。 您可以在此阅读并学习如何操作:
尝试减肥。您应该只需要几行就可以连接到服务器并发送一行文本。写一篇这样的文章,看看它是否有效。您还应该确切地告诉我们,当您尝试连接到另一台机器时会发生什么,您会遇到什么样的错误。它只是说连接被拒绝,但当我连接到与本地主机在同一台机器上运行的服务器时,它会连接并发送和接收消息。您尝试过这个简单的程序吗?您需要一行代码来创建套接字,一行代码用于获取OutputStreamWriter,另一行代码用于通过它编写示例消息。加上样板异常处理和关闭资源。非常简单,可能会帮助你解决问题。不幸的是,这里没有人可以运行您的代码并找出问题所在。。。(因为我们没有您的服务器)。就此而言,您编写了服务器吗?你确定问题出在客户端而不是服务器上吗?我已经编写了服务器,我的服务器工作得很好,它连接到本地主机之外的客户端。“尝试搜索谷歌”不是StackOverflow的答案。回答或不回答问题,但这没有帮助。我仍然不清楚这是否有帮助。你为什么认为港口转运是必要的?你必须这样做。防火墙将阻止连接。您甚至还没有确定是否存在防火墙。他编写了服务器和客户端;我看不出有任何理由认为他们之间有防火墙。@dcsohl他还说他们在不同的计算机上。可能它们都有路由器和windows。我看不出有什么理由不认为他们之间有防火墙