- ベストアンサー
javaによるファイル送信のプログラム
- ユニキャスト通信のおけるプログラミングで、1のプログラムを2のプログラムを使ってファイル送信ができるようにしたいのですがうまくいきません。
- 私のjavaの知識が授業についていかなくて図書館でいろいろと本を探したのですが見つかりませんでした。
- 誰か教えていただけませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 受け手はこちらのプログラムを使ってします。こちらも改良の必要があるのかましれません。 このプログラムだと、ネットワークから受信したデータをStringに変換してSystem.out.println()で出力しているだけですね。送られてくるデータの内容によってはStringに変換するときに文字化けが発生することでしょう。それから、受信したデータをファイルとして書き込まなくていいのですか? もう一つ、このプログラムではユーザが何かをキー入力しない限り次のデータを受け取ることができません。100KBのデータを受信するために100回以上のキー入力が必要なプログラムを使いたい人はあまりいないと思います。 そもそも、どうしてDatagramSocket(UDP)を使おうとしているのかが謎です。UDPはパケット紛失などが起こりえるプロトコルなのでその対策をアプリケーションで行わないといけません。ファイルの内容を正確に送ろうと思うのならTCPを使うほうが簡単に書けます。学校の課題か何かで「DatagramSocketを使って書け」と指示されているのでしょうか? 結論 --> udpechoServerとudpechoClientを改造してどうにかしようという考えは捨てて、一から設計し直してください。
その他の回答 (1)
- salsberry
- ベストアンサー率69% (495/711)
> 1のプログラムを2のプログラムを使ってファイル送信ができるようにしたいのですがうまくいきません。 質問が無茶苦茶です。1と2のプログラムを元にして頑張っても、ネットワーク越しにファイルを送信できるようにはならないでしょう。 質問者さんはファイルを送信するプログラムを作りたいようですが、ファイルを受信する側のプログラムは既にあるのですか? それもこれから作るのですか? ファイルの送り手と受け手の間の通信規約(プロトコル)が決まらないと、プログラムは作れません。
補足
説明不足ですみませんでした。受け手はこちらのプログラムを使ってします。こちらも改良の必要があるのかましれません。お手数ですがよろしくお願いします。 import java.net.*; import java.io.*; public class udpechoClient{ static final int echo_PORT = 7; //エコーポート番号 static final int BUFSIZE = 1024; //バッファサイズ public static void main(String[] args) throws IOException{ int port = echo_PORT; //ポート番号 byte[] buf = new byte[BUFSIZE]; //送受信バッファ int k; //バイト数 DatagramSocket sock = null; //データグラムソケット宣言,初期化 if(args.length != 1){ throw new IllegalArgumentException("usage: >java udpechoClient <IP_Address>"); } while(true){ try{ InetAddress adr = InetAddress.getByName(args[0]); //サーバIPアドレス System.out.print("cli>"); //プロンプト出力 k = System.in.read(buf); //キー入力 if(k == -1){ break; } sock = new DatagramSocket(); DatagramPacket packet = new DatagramPacket(buf,buf.length,adr,port); sock.send(packet); //入力データ送信 buf = new byte[BUFSIZE]; packet = new DatagramPacket(buf,buf.length); sock.receive(packet); //エコーデータ受信 String data = new String(packet.getData(),0,packet.getLength()); System.out.println(data); //画面出力 }catch(SocketException e){ e.printStackTrace(); } } sock.close(); //ソケットクローズ } }
お礼
ご回答ありがとうございます。学校で、「この3つのプログラムを改造して」、と指定がありましたのでこう質問させていただきました。お忙しい中二度もご回答ありがとうございました。