2011-01-23 15 views
4

クライアント - サーバファイル転送アプリケーションを作成する課題があります。 これは簡単な例です。 SOFで同様の質問で与えられた例を試しましたが、ファイルを転送できませんでした。サーバ - クライアント間でファイルのアップロードとダウンロード

私はクライアントとサーバーをソケット経由で通信しようとしています。私を助けることができる人がいたら、私はうれしいでしょう。

クライアントはファイルをサーバーにアップロードします。クライアントはサーバーからファイルをダウンロードすることもできます。アプリケーションを作成する方法です。ここで

は、クライアント側のコードである:ここで

package wdc; 

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

class TCPClient { 

    public static void main(String args[]) { 
     byte[] aByte = new byte[1]; 
     int bytesRead; 

     Socket clientSocket = null; 
     InputStream is = null; 

     try { 
      clientSocket = new Socket("127.0.0.1", 3248); 
      is = clientSocket.getInputStream(); 
     } catch (IOException ex) { 
      // Do exception handling 
     } 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     if (is != null) { 

      FileOutputStream fos = null; 
      BufferedOutputStream bos = null; 
      try { 
       fos = new FileOutputStream("C:\\testout.pdf"); 
       bos = new BufferedOutputStream(fos); 
       bytesRead = is.read(aByte, 0, aByte.length); 

       do { 
         baos.write(aByte); 
         bytesRead = is.read(aByte); 
       } while (bytesRead != -1); 

       bos.write(baos.toByteArray()); 
       bos.flush(); 
       bos.close(); 
       clientSocket.close(); 
      } catch (IOException ex) { 
       // Do exception handling 
      } 
     } 
    } 
} 

は、サーバー側のコードです:

package wds; 

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

class TCPServer { 

    public static void main(String args[]) { 

     while (true) { 
      ServerSocket welcomeSocket = null; 
      Socket connectionSocket = null; 
      BufferedOutputStream outToClient = null; 

      try { 
       welcomeSocket = new ServerSocket(3248); 
       connectionSocket = welcomeSocket.accept(); 
       outToClient = new BufferedOutputStream(connectionSocket.getOutputStream()); 
      } catch (IOException ex) { 
       // Do exception handling 
      } 

      if (outToClient != null) { 
       File myFile = new File("C:\\testserver.pdf"); 
       byte[] mybytearray = new byte[(int) myFile.length()]; 

       FileInputStream fis = null; 

       try { 
        fis = new FileInputStream(myFile); 
       } catch (FileNotFoundException ex) { 
        // Do exception handling 
       } 
       BufferedInputStream bis = new BufferedInputStream(fis); 

       try { 
        bis.read(mybytearray, 0, mybytearray.length); 
        outToClient.write(mybytearray, 0, mybytearray.length); 
        outToClient.flush(); 
        outToClient.close(); 
        connectionSocket.close(); 

        // File sent, exit the main method 
        return; 
       } catch (IOException ex) { 
        // Do exception handling 
       } 
      } 
     } 
    } 
} 

私はこれらのソース・ファイルを実行することができませんでしたし、私は理由を知りません。

+1

* *具体的な問題は何ですか?ここでの質問は何ですか? –

+0

詳細は「これらのソースファイルを実行できませんでした」を詳しく説明してください。どのくらい正確に試しましたか?代わりに正確に何が起こるのですか? – BalusC

+0

私はプロジェクトを構築しました。エラーはありませんでした。私はプロジェクトとしてそれぞれ指定しました。サーバー側:wds、クライアント側:wdc。 NetBeansでプロジェクトをビルドする際に、各プロジェクトでクラスをメインクラスとして設定しました。私はそれらを実行しようとしたが、ファイル転送は起こらなかった。 自分のPCにサーバーをセットアップする必要がありますか?私は私がする必要がないことを知っています。 このコードには、ファイルをクライアントからサーバーにダウンロードできないバグはありますか?それとも私がやっている間違い? –

答えて

4

私はコードを見て、一見してもそれに何も間違っていないようです。だから、私はそのままコピーし、サーバーコードで使われていたファイルを私のシステム上にあったファイルに変更し、コードを実行しました。それはうまくいったので、少なくともコードが正しいことと、それがやるべきことをすることを保証することができます。私はUbuntuマシンでコードを実行しましたが、結果がどのように影響するかはわかりません。

私の助けがほんの少しのポインタ: 1)TCPServerファイルを実行していて、次にTCPClientを実行していますか? (ダム、私は知っていますが、わかりません) 2)ポート3248を使用しているプロセスはありますか? 3)ファイルを実行しているプロセスに、指定されたパスを読み書きする権限がありますか? 4)TCPServerで指定されたファイルは実際に存在しますか? 5)IDEの外でクラスファイルを実行しようとしましたか?IDEから独立する方法を学ぶのが良い方法です。

これはあなたの割り当てに役立ち、幸運だったと思います。

+0

答えをありがとうございます。はい、私はサーバーを最初に実行していました。ファイルパスを変更してコマンドプロンプトを表示すると、それは機能しました。 IDEから独立していることが重要でした。ありがとうございました。 :) –

関連する問題