客户端 - 服务器应用程序无法正常工作

时间:2013-11-19 17:55:11

标签: java sockets

首先,对不起我的英语,它有点生疏。

我的目标是在远程计算机上读取和写入文本文件。首先,我开发了一个简单的客户端 - 服务器程序,只是为了连接两台计算机。但我遇到了麻烦。如果我尝试使用客户端应用程序(我开发的应用程序)连接到服务器,则拒绝连接。但是,如果我使用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();


    }

}

1 个答案:

答案 0 :(得分:1)

我刚刚编译了你的代码,它运行正常。这就是我输出的结果:

服务器 Soy el cliente NameLaptop / MyIPAddress

Hola clente / MyIPAddress:52023

对于客户

Escucho el puerto:2000         Sirvo al cliente:/ MyIPAddress:52023

我认为你的代码没有问题。这可能是你PC上设置权限的问题