¿Cómo utilizar el socket Java para la transferencia de archivos? ¿Alguien puede dar un ejemplo sencillo, incluidos el remitente y el destinatario?
El método de transmisión de información de red en Java se basa en el protocolo TCP o el protocolo UD P, y el socket se basa en el protocolo TCP
Ejemplo 1
(1) Programa de terminal de cliente:
importar java.io.*;
importar java.net.*;
Cliente de clase pública
{ public static void main(String args[])
{ String s=null;
Socket mysocket;
DataInputStream in=null;
DataOutputStream out=null;
prueba{
mysocket=new Socket("localhost",4331);
in=new DataInputStream(mysocket.getInputStream ( ));
out=new DataOutputStream(mysocket.getOutputStream());
out.writeUTF("Hello!");//Escribe en la "línea" toda la información .
while(true)
{
s=in.readUTF();//Leer la información puesta en la "línea" por el servidor usando en . Estado bloqueado,
//A menos que se lea la información.
out.writeUTF(":"+Math.random());
System.out.println("El cliente recibió:"+s);
Thread.sleep(500);
}
}
catch(IOException e)
{ System.out.println ( "No se puede conectar");
}
catch(InterruptedException e){}
}
}
(2) Programa del lado del servidor:
importar java.io.*;importar java.net.*;
Servidor de clase pública
{ público static void main(String args[])
{ ServerSocket server=null;
Socket you=null;String s=null;
DataOutputStream out=null ; DataInputStream in=null;
try{ server=new ServerSocket(4331);}
catch(IOException e1){System.out.println("ERRO:"+e1) ; }
intentar{ you=server.accept();
in=new DataInputStream(you.getInputStream());
out=new DataOutputStream( you .getOutputStream());
while(true)
{
s=in.readUTF();// Leer la entrada del cliente usando in Información en "Línea". Estado bloqueado,
//A menos que se lea la información.
out.writeUTF("Hola: soy el servidor");//Escribe información en la "línea" hasta el final.
out.writeUTF("El número que mencionaste es :"+s);
System.out.println("Servidor recibido:"+s);
Thread.sleep(500);
}
}
catch(IOException e)
{ System.out.println(""+e);
}< / p>
catch(InterruptedException e){}
}
}
Ejemplo (2)
(1) Cliente
importar java.net.*;importar java.io.*;
importar java.awt.*;importar java.awt.event.*;
importar java.applet.*;
la clase pública Computer_client extiende Applet implementa Runnable,ActionListener
{ Cálculo del botón; TextField ingresa el cuadro de texto de tres lados, cuadro de texto del resultado del cálculo <; /p>
Socket socket=null;
DataInputStream in=null; DataOutputStream out=null;
Hilo de rosca
public void init()
{ setLayout(new GridLayout(2,2));
Panel p1=nuevo Panel(),p2=nuevo Panel()
Cálculo = new Button("Calcular");
Ingrese la longitud de tres lados text box=new TextField(12); resultado del cálculo text box=new TextField(12);
p1. add (new Label("Ingrese la longitud de los tres lados del triángulo, separados por comas o espacios:"));
p1.add(Ingrese la longitud de los tres lados en el cuadro de texto);
p2. add(new Label("Resultado del cálculo:"));p2.add(cuadro de texto del resultado del cálculo);p2.add(cálculo);
Calculation.addActionListener(this );
add(p1);add(p2);
}
public void start()
{ intentar p>
{ // Establece una conexión de socket con el servidor donde reside el subprograma:
socket = new Socket(this.getCodeBase().getHost(), 4331); p> in = nuevo DataInputStream (socket.getInputStream());
salida = nuevo DataO
utputStream(socket.getOutputStream());
}
catch (IOException e){}
if(thread == null)
{ thread = new Thread(this);
thread.start();
}
}
ejecución pública vacía ()
{ String s=null;
while(true)
{ try{ s=in.readUTF();// Estado de bloqueo a menos que Información se lee.
Cuadro de texto del resultado del cálculo.setText(s);
}
catch(IOException e)
{ Cuadro de texto del resultado del cálculo. setText("Desconectado del servidor");
break;
}
}
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==cálculo)
{ String s=Ingrese el cuadro de texto de longitud de tres lados.getText();
if(s!=null)
{ prueba { out.writeUTF(s);
}
catch(IOException e1 ) {}
}
}
}
}
(2) Lado del servidor
importar java.io.*;importar java.net.*;
importar java.util.*;importar java.sql.*;
clase pública Computer_server
p>{ public static void main(String args[])
{ ServerSocket server=null;Server_thread thread;
Socket you=null;
while(true)
{ try{ server=new ServerSocket(4331);
}
catch(IOException e1)
{ System.out.println("Listening"); //Los objetos ServerSocket no se pueden crear repetidamente.
}
try{ you=server.accept();
System.out.println("Dirección del cliente:"+you.getInetAddress() ) ;
}
catch (IOException e)
{ System.out.println("Esperando cliente");
}
if(you!=null)
{ new Server_thread(you).start() //Inicia un hilo dedicado para cada cliente.
}
más
{ continuar;
}
}
}
}
clase Server_thread extiende Thread
{ Socket socket;Connection Con=null;Statement Stmt=null;
DataOutputStream out= null;DataInputStream in=null;int n=0;
String s=null;
Server_thread(Socket t)
{ socket=t; p>
intente { in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
}
catch (IOException e)
{}
}
public void run()
{ while(true)
{ double a[]=new double[3] ;int i=0;
try{ s=in.readUTF(); estado de bloqueo a menos que se lea la información.
StringTokenizer fenxi=new StringTokenizer(s," ,");
while(fenxi.hasMoreTokens())
{ String temp=fenxi.nextToken( );
intentar{ a[i]=Double.valueOf(temp).doubleValue();i++;
}
catch(NumberFormatException e)
{ out.writeUTF("Ingrese caracteres numéricos");
}
}
double p=(a[0] +a[1]+a[2])/2.0;
out.writeUTF(" "+Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a [2])));
dormir(2);
}
catch(InterruptedException e){}
catch ( IOException e)
{ System.out.println("El cliente se fue");
break;
}
} p>
}
}
Estos ejemplos son del tutorial práctico de Java2.