Programación de socket para implementar el programa de chat
/*
* MyClient.java
*
*Creado a las 13:37 del 16 de agosto de 2009
p>
*
*Para cambiar esta plantilla, seleccione Herramientas | Administrador de plantillas
* y abra la plantilla en el editor.
*/
Importar Java io *;
Importar Java net * . >
{
Cliente de socket;
Indicador booleano = true;
FileInputStream fis//Este flujo de entrada es responsable de leer los archivos transferidos locales.
DataOutputStream dos//Este flujo de salida es responsable de transmitir datos a otra computadora (lado del servidor).
DataInputStream dis//Este flujo de entrada es responsable de leer la información de respuesta de otra computadora.
Public static void main(String[] args)
{
Nuevo MiCliente(). inicio del cliente();
}
public void ClientStart()
{
Probar
{
client = new Socket(" 192.168 . 2 . 101 ", 30000); // IP del lado del servidor, (esto es solo en la LAN) El mío es este, el tuyo depende de la realidad.
//client=new Socket("localhost", 30000);
system out . println(" conectado "); flujo de salida(cliente. get flujo de salida());
dis = nuevos datos flujo de entrada(cliente. getinputstream());
Transferir(nuevo archivo(" e:\ \ 1 \ \ ");
string s = "/]00 "; //Marca que indica la finalización de la transferencia
byte b[]= s. getbytes();
dos.write(b, 0, s. length());
dos.flush();
}
Catch (IOException e )
{
sistema . println("Error"
}
}
public void transmit(file f)throwsioexception//Este es el núcleo de la transmisión y será recursivo
{
Byte b[];
String ts. ;
int ti
for(file f1:f.listFiles())
{//Primero determine si f1 es un archivo o una carpeta a través del sentencia if.
Si (f1.isDirectory()) //fi es una carpeta, envía un mensaje al servidor
{
ts="/ ]0f" +(f1.getPath().replace("e:\\1\\ "," "); ///]0f "Se utiliza para indicar que el contenido de este mensaje es el nombre de la carpeta.
b = ts . getbytes();
dos . . read();
Transmisión (f 1); //Debido a que f1 es una carpeta (es decir, un directorio), puede haber archivos o carpetas en ella, por lo que se realiza la recursividad.
}
Otros
{
fis = nuevo archivo inputstream(f 1);
ts= "/]0c"+(f1.getPath().replace("e:\\1\\ "," "); //Igual que el anterior, indica que este es el nombre de un archivo.
b = ts . getbytes();
dos .
dos .escribir int(fis . disponible()); //Transmite un valor entero que indica el tamaño del archivo a transferir. p>
dis .read();
b = nuevo byte[10000];
while(fis.available()>0)//Iniciar transferencia de archivos
{
ti = fis.read(b);
dos.write(b, 0, ti);
dos. fluir();
}
dos . fluir();
fis cerrar()
dis .
}
}
}
}
/*
* MyServer.java p>
*
*Creado el 16 de agosto de 2009 a las 11:44 a. m.
*
*Para cambiar esta plantilla , seleccione Herramientas | Administrador de plantillas
* y abra la plantilla en el editor
*/
/**
* p>
* @authoradmin
*/
Importar Java io *; >
Clase pública MyServer
{
Servidor ServerSocket = nulo
Cliente de socket = nulo
Indicador booleano = verdadero;
DataInputStream dis
DataOutputStream dos
Flujo de salida de archivos fos
Public static void main(String[] args)
{
Nuevo MiServidor().
inicio del servidor();
}
public void ServerStart()
{
Probar
{
servidor = nuevo socket de servidor(30000);
System.out.println("Número de puerto:"+servidor . getlocalport());
cliente = servidor . aceptar();
System.out.println("Conexión completada");
dis = nuevos datos inputstream(client . getinputstream()); p>dos = nuevo flujo de salida de datos(cliente . obtener flujo de salida());
Cadena respuesta = " g
byte ans[]= respuesta . getbytes(); p> p>
byte b[]=nuevo byte[1000];
int ti
Nuevo archivo ("e:\\2").
mkdirs();
mientras(bandera)
{
ti = dis . ans);
String select=new String(b, 0, ti);
if(select.contains("/]0f "))
{
Archivo f = nuevo Archivo(" e:\ \ 2 \ \ "+(select . replace("/]0f "," ")));
sistema . out . println(" crear directorio ");
f . ))
{
fos = flujo de salida de nuevo archivo(" e:\ \ 2 \ \ "+(select . replace("/]0c "," "))) ;
Cadena cs;
Booleano cflag = true
int tip = dis . readint()
dos . );
mientras(tip>0)
{
ti=dis.read(b, 0, (tip & gt1000?1000:tip )); /p>
tip = tip-ti;
cs = nueva cadena (b, 0, 4
fos.write(b, 0 , ti);
}
fos .flush();
fos .close()
dos . >
}
else if(select.contains("/]00 "))
{
bandera = false
}
}
dis .cerrar();
cliente .cerrar()
servidor . /p>
}
Captura (IOException e)
{
system out . p>}
}
}