Article View: be.comp.programming
Article #556Re: client/server file transfer in java
From: An Ony
Date: Mon, 22 Jan 2007 22:20
Date: Mon, 22 Jan 2007 22:20
103 lines
4448 bytes
4448 bytes
Je moet je helemaal niets aantrekken van die filesize?
Schrijven doe je in blokken van 2^n byte-arrays tot er niets meer komt.
Een write geeft normaal gezien ook nog eens het aantal effectief geschreven bytes terug. Hetzelfde met een receive: zo weet je
meteen hoe groot je array moet zijn, als je variabele lengtes zou gebruiken voor je array.
btw: kijk eens naar java.net.DatagramPacket en DatagramSocket
"Pieter Vandewoestyne" <pieter.vandewoestyne@howest.be> wrote in message news:r3rsh.300661$W33.6038622@phobos.telenet-ops.be...
> Hoi,
> Ik probeer een client/server applicatie te schrijven die een bestand van de client uploadt naar de server.
> Het probleem hierbij is dat ik in de code van mijn server zelf de bestandsgrootte hard gecodeerd moet meegeven.
> Hoe zou ik er voor kunnen zorgen dat de server zelf weet wat de bestandsgrootte zal zijn van het bestand dat binnenkomt?
> Mijn code ziet er als volgt uit:
>
> SERVER
> ----------
>
> class fserver {
>
> public static void main(String [] args ) throws IOException {
> int filesize=10722; // filesize temporary hardcoded
>
> // create socket
> ServerSocket servsock = new ServerSocket(1111);
> System.out.println("Waiting for connection...");
> Socket sock = servsock.accept();
> System.out.println("Accepted connection");
>
> byte [] mybytearray = new byte [filesize];
>
> BufferedInputStream bis = new BufferedInputStream(sock.getInputStream(),filesize);
> // bis.read(mybytearray,0,mybytearray.length);
>
> int bytesRead = 0;
> while ( bytesRead < filesize ) {
> int off = bytesRead;
> int len = filesize - bytesRead;
>
> int readCount = bis.read( mybytearray, off, len );
>
> if ( readCount == -1 ) { // chech for EOF
> System.err.println( "unexpected EOF" );
> System.exit( 1 );
> }
>
> bytesRead += readCount;
> }
>
> FileOutputStream fos = new FileOutputStream("C:\\briefcopy.doc");
> BufferedOutputStream bos = new BufferedOutputStream(fos);
> fos.write(mybytearray,0,mybytearray.length);
>
> // cleanup after file transfer
> sock.close();
> servsock.close();
> }
>
> }
>
>
> CLIENT
> -----------
>
> class fclient {
>
> public static void main (String [] args ) throws IOException {
>
> // create socket
> Socket sock = new Socket("127.0.0.1",1111);
> System.out.println("Connecting...");
>
> // get the file handle to send
>
> File myFile = new File( "C:\\brief.doc" );
> byte [] mybytearray = new byte [(int)myFile.length()];
> FileInputStream fis = new FileInputStream(myFile);
> BufferedInputStream bis = new BufferedInputStream(fis);
> bis.read(mybytearray,0,mybytearray.length);
> OutputStream os;
> DataOutputStream dos;
> os=sock.getOutputStream();
> dos=new DataOutputStream(os);
> System.out.println("Sending...");
> dos.write(mybytearray,0,mybytearray.length);
>
> // cleanup
>
> sock.close();
>
> }
>
> }
>
>
> -------------------------------------------------------------------
>
> Alvast bedankt,
> Pieter
>
>
>
>
Technical Details
Message-ID:
<45b53895$0$5518$ba620e4c@news.skynet.be>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!news1.google.com!newsfeed.media.kyoto-u.ac.jp!news.skynet.be!skynet.be!newspost001!tjb!not-for-mailReferences:
<r3rsh.300661$W33.6038622@phobos.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,4e7fc654d96d4a4a X-Google-Attributes: gidfcea4,public X-Google-Language: DUTCH,ASCII-7-bit Path: arc1-ca.pugleaf.net!g2news2.google.com!news4.google.com!news1.google.com!newsfeed.media.kyoto-u.ac.jp!news.skynet.be!skynet.be!newspost001!tjb!not-for-mail From: "An Ony" <nowhere@somewhere.net> Newsgroups: be.comp.programming References: <r3rsh.300661$W33.6038622@phobos.telenet-ops.be> Subject: Re: client/server file transfer in java Date: Mon, 22 Jan 2007 23:20:03 +0100 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 X-RFC2646: Format=Flowed; Response Lines: 105 Message-ID: <45b53895$0$5518$ba620e4c@news.skynet.be> Organization: -= Belgacom Usenet Service =- NNTP-Posting-Host: 3b68fcc8.news.skynet.be X-Trace: 1169504405 news.skynet.be 5518 81.246.182.190:2292 X-Complaints-To: usenet-abuse@skynet.be