(Java)带Socket的简单文件传输(客户端 - 服务器)

时间:2014-12-30 21:55:49

标签: java sockets networking client-server stream-socket-client

我正在使用一个简单的文件传输程序,但我真的得到一个无法继续的点,导致编译器出现以下错误:

  

Cliente_FTP.java:60:错误:找不到符号                 conexion.enviar_archivo(nombre_archivo); //这就是产生错误的线!                         ^符号:方法enviar_archivo(String)location:类型Misocket 1 error的变量conexion

我只是想在一个软件包(Misocket)中创建一个新方法(enviar_archivo和recibir_archivo),但是在调用它时它是无法访问的接缝。我会尝试更好地向我解释代码,我有一个客户端与服务器交换日志和密码,直到这里每个都很顺利,但是当我尝试在类Misocket中调用方法enviar_archivo并编译时,我得到了上面的错误。如果有人看到我做得不好的话请告诉我。

这是客户端调用Misocket作为Socket扩展的条目。

import java.io.*;
import java.net.*;    
import Misocket.*;

public class Cliente_FTP {

    static String log;
    static String clave;
    static String nomb;
    static String direccion;
    Socket servidor;
    int numCliente=0;
    static String mensaje;


 public static void main(String args[]) {

        direccion = "localhost";
        int puerto = 5972;
        String operacion = null;
        String nombre_archivo;

        try {
            Misocket conexion = new Misocket(direccion, puerto);
            System.out.println(conexion.recibir_mensaje());
            boolean bandera_operacion;
            bandera_operacion = true;

            while(bandera_operacion){
                operacion = System.console().readLine("Ingrese (1) autenticar usuario o (2) para registar usuario: ");
                if(operacion.equals("1")){
                    System.out.println("autenticar usuario");
                    bandera_operacion = false;

                }
                else if (operacion.equals("2")) {
                    System.out.println("registrar usuario");
                    bandera_operacion= false;
                } else {
                    System.out.println("error");
                    bandera_operacion = true;
                }
            }

            log = System.console().readLine("usuario: ");
            clave = System.console().readLine("clave: ");

            mensaje = operacion + " " + log + " " + clave;
            conexion.enviar_mensaje(mensaje);


            mensaje = conexion.recibir_mensaje();
            System.out.println(mensaje);

            if(!"Usuario no existente".equals(mensaje)){  // si el usuario si existe ejecutar codigo para transferir archivos
                System.out.println("listo para transmitir archivos");
                nombre_archivo = "ENVIAR+ARCHIVO" + "./FTP/ArchivoServidor.txt";
                conexion.enviar_archivo(nombre_archivo);  //    THIS IS THE LINE GENERATING THE ERROR !!!

            }

            conexion.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
 }
}
包含创建套接字,流,发送接收消息的方法的类Misocket,一切顺利,但应该发送和接收文件的方法: 包Misocket;

import java.io.*;
import java.net.*;

public class Misocket extends Socket{

    private Socket socket;
    private BufferedReader entrada;
    private PrintStream salida;
    private InputStream is;
    private OutputStream os;
    private String nombre_archivo;


    public Misocket(String host_servidor, int puerto) throws SocketException, IOException{
        socket = new Socket(host_servidor, puerto);
        crear_flujos();
    }

    public Misocket(Socket socket) throws IOException{
        this.socket = socket;
        crear_flujos();
    }


    private void crear_flujos() throws IOException {        
        InputStream flujoentrada = socket.getInputStream();
        entrada = new BufferedReader(new InputStreamReader(flujoentrada));
        OutputStream flujosalida = socket.getOutputStream();
        salida = new PrintStream (flujosalida);
    } // FIN CREAR_FLUJOS


    public void enviar_mensaje(String mensaje) throws IOException {
        if(mensaje.contains("ENVIAR+ARCHIVO")){
            nombre_archivo = mensaje.replaceAll("ENVIAR+ARCHIVO", "");
            System.out.println("enviando " + nombre_archivo);
            enviar_archivo(nombre_archivo);
        } else {
            System.out.println("estoy como mensaje" + nombre_archivo);
            salida.println(mensaje);
            salida.flush();
        }

    } // FIN ENVIAR MENSAJE


    public String recibir_mensaje() throws IOException {
        String mensaje = entrada.readLine();
        return mensaje;
    } // FIN RECIBIR_MENSAJE


    public void enviar_archivo(String nombre_archivo) throws IOException {
        File archivo = new File(nombre_archivo);
        byte[] mybytearray = new byte[(int) archivo.length() + 1];
        FileInputStream fis = new FileInputStream(archivo);
        BufferedInputStream bis = new BufferedInputStream(fis);
        bis.read(mybytearray, 0, mybytearray.length);
        System.out.println("Sending " + "(" + mybytearray.length + " bytes)");
        salida.write(mybytearray,0,mybytearray.length);
        salida.flush();
        fis.close();
        bis.close();
    } // FIN ENVIAR ARCHIVO

    public void recibir_archivo() throws IOException{
        int filesize = 6022386;
        int bytesRead;
        int current = 0;
        byte[] mybytearray = new byte[filesize];

        FileOutputStream fos = new FileOutputStream("def");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bytesRead = is.read(mybytearray, 0, mybytearray.length);
        current = bytesRead;

        do {
            bytesRead = is.read(mybytearray, current,
                    (mybytearray.length - current));
            if (bytesRead >= 0)
                current += bytesRead;
        } while (bytesRead > -1);

        bos.write(mybytearray, 0, current);
        bos.flush();
        bos.close();
    }

    public void cerrar() throws IOException {
        socket.close();
    } // FIN CERRAR SOCKET
} // FIN DE LA CLASE

此致 /俄

0 个答案:

没有答案