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

标签 java sockets

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

我的目标是在远程计算机上读取和写入文本文件。首先,我开发了一个简单的客户端-服务器程序,只是为了连接两台计算机。但我有麻烦了。如果我尝试使用客户端应用程序(我开发的应用程序)连接到服务器,连接将被拒绝。但如果我从 Windows 和 Ubuntu 命令提示符下使用 Telnet 进行操作,它就可以正常工作。客户端应用程序抛出以下异常(就像没有服务器在监听......):

java.net.ConnectException: Connection refused

另一点是它必须能够在 WAN 网络中建立连接(这是我的最终目标),而不仅仅是在 LAN 中(正如我所说,这里与 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();


    }

}

最佳答案

我刚刚编译了你的代码并且运行良好。这是我得到的输出:

服务器 Soy el cliente NameLaptop/MyIPAddress

Hola clente/MyIP地址:52023

对于客户

埃斯库乔港:2000 Sirvo al 客户:/MyIPAddress:52023

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

关于java - 客户端-服务器应用程序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20078556/

相关文章:

java - 在自定义身份验证过滤器中处理 Spring Boot 上的错误

Java 异常,捕捉什么,不捕捉什么?

java - JList设置为ArrayList,显示预设标题

sockets - ClientAbortException : java.net.SocketException:软件导致连接中止:套接字写入错误

Linux:在只写 TCP 套接字上检测 CLOSE_WAIT

c++ - UDP如何在同一端口上发送和接收?

我可以获得套接字缓冲区剩余大小吗?

java - 如何解决斯坦福模型工具箱中的“"rt.jar(java/lang/CharSequence.class)'已损坏”

java - LibGDX - 每当我的主角接触硬币时,IllegalArgumentException 都会导致我的游戏崩溃

networking - 为什么微软以不同的方式实现套接字?