首先,对不起我的英语,它有点生疏。
我的目标是在远程计算机上读取和写入文本文件。首先,我开发了一个简单的客户端 - 服务器程序,只是为了连接两台计算机。但我遇到了麻烦。如果我尝试使用客户端应用程序(我开发的应用程序)连接到服务器,则拒绝连接。但是,如果我使用Windows中的Telnet和Ubuntu命令提示符,它可以正常工作。客户端应用程序抛出以下异常(就像没有服务器监听时那样......):
java.net.ConnectException: Connection refused
另一点是它必须能够在WAN网络中建立连接(这是我的最终目标),而不仅仅是在局域网中(我说过,这里可以正常使用Telnet)。
我在这里留下代码。非常感谢您的关注和耐心。
PD:代码是西班牙语,但我认为这很容易理解。
Servidor.java
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Servidor {
//Constantes
final int MAX_CLIENTES = 5;
final int PUERTO = 2000;
/************/
//Métodos - constructor
public Servidor(){
ServerSocket skServidor;
try {
skServidor = new ServerSocket(PUERTO);
System.out.println("Escucho el puerto: "+PUERTO);
for(int numCli = 0; numCli < MAX_CLIENTES; numCli++){
Socket skCliente = skServidor.accept();
System.out.println("\tSirvo al cliente: "+skCliente.getRemoteSocketAddress());
OutputStream aux = skCliente.getOutputStream();
DataOutputStream flujo = new DataOutputStream(aux);
flujo.writeUTF("\nHola cliente "+ skCliente.getRemoteSocketAddress());
skCliente.close();
}
} catch(UnknownHostException e){
System.out.println( e );
System.out.println("Error en la conexión." );
}
catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e);
}
}
public static void main(String[] args){
new Servidor();
}
}
Cliente.java
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class Cliente {
//Constantes
final int PUERTO = 2000;
//final String HOST = "192.168.1.36";
/************/
//Métodos - constructor
public Cliente(){
try{
InetAddress address = InetAddress.getLocalHost();
Socket skCliente;
System.out.println("Soy el cliente "+address);
skCliente = new Socket(address, PUERTO);
InputStream aux = skCliente.getInputStream();
DataInputStream flujo = new DataInputStream(aux);
System.out.println(flujo.readUTF());
skCliente.close();
} catch(UnknownHostException e){
System.out.println( e );
System.out.println("Error en la conexión." );
} catch (Exception e) {
System.out.println(e);
}
}
//Cuerpo del programa
public static void main(String[] args){
new Cliente();
}
}
答案 0 :(得分:1)
我刚刚编译了你的代码,它运行正常。这就是我输出的结果:
服务器 Soy el cliente NameLaptop / MyIPAddress
Hola clente / MyIPAddress:52023
对于客户
Escucho el puerto:2000 Sirvo al cliente:/ MyIPAddress:52023
我认为你的代码没有问题。这可能是你PC上设置权限的问题