У меня работает следующее.Я удалил бесконечный цикл, который был у вас на стороне сервера (while(true)
), и провел небольшую очистку.Ваш код в основном работает, но похоже, что у вас была куча остатков kruft от редактирования (цикл while), и вы заблудились, не читая код внимательно.
Я сделал одно небольшое изменение, чтобы использовать временный файлпотому что я не хотел создавать каталог FTP на моем компьютере.Просто измените этот один звонок на File.createTempFile
на все, что вам нужно.
public class ServerTest implements Runnable {
ServerSocket server;
Socket socket;
public static void main( String[] args ) throws Exception {
new Thread( new ServerTest() ).start();
Thread.sleep( 100 ); // wait a bit for server to start
clientUpload();
}
@Override
public void run() {
try {
server = new ServerSocket( 7888, 0, InetAddress.getLocalHost() );
socket = server.accept();
up( "ServerTest" );
} catch( IOException ex ) {
Logger.getLogger( ServerTest.class.getName() ).log( Level.SEVERE, null, ex );
}
}
public void up( String nombre ) throws IOException {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
byte[] receivedData;
int in;
int total = 0;
try {
//Buffer de 1024 bytes
System.out.println( nombre );
receivedData = new byte[ 1024 ];
bis = new BufferedInputStream( socket.getInputStream() );
//Recibimos el nombre del archivo
//Para guardar archivo recibido
bos = new BufferedOutputStream( new FileOutputStream(
File.createTempFile( nombre, ".test" ) ) );
while( (in = bis.read( receivedData )) != -1 ) {
bos.write( receivedData, 0, in );
total += in;
}
System.err.println( "Total bytes uploaded: " + total );
} catch( Exception e ) {
System.err.println( e );
} finally {
if( bos != null ) bos.close();
if( bis != null ) bos.close();
}
}
private static void clientUpload() {
try( Socket client = new Socket( InetAddress.getLocalHost(), 7888 );
OutputStream outs = client.getOutputStream() )
{
System.err.println( "Sending data..." );
byte[] data = "This is a test!".getBytes( "UTF-8" );
outs.write( data, 0, data.length );
System.err.println( "Data finished." );
} catch( IOException ex ) {
Logger.getLogger( ServerTest.class.getName() ).log( Level.SEVERE, null, ex );
}
}
}