簡體   English   中英

客戶端-服務器應用程序無法正常運行

[英]Client-Server application doesn't work properly

首先,對不起我的英語,這有點生銹。

我的目的是在遠程計算機上讀寫文本文件。 首先,我開發了一個簡單的客戶端-服務器程序,僅用於連接兩台計算機。 但是我有麻煩了。 如果我嘗試使用客戶端應用程序(我開發的客戶端應用程序)連接到服務器,則連接被拒絕。 但是,如果我使用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();


    }

}

我剛剛編譯了您的代碼,它運行良好。 這是我得到的輸出:

服務器大豆客戶端NameLaptop / MyIPAddress

Hola clente /我的IP地址:52023

對於客戶

埃斯庫喬港(Escucho el puerto):2000 Sirvo客戶:/ MyIPAddress:52023

我認為您的代碼沒有問題。這可能與您在PC上設置的權限有關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM