javaによるファイル送信のプログラム
ユニキャスト通信のおけるプログラミングで、1のプログラムを2のプログラムを使ってファイル送信ができるようにしたいのですがうまくいきません。私のjavaの知識が授業についていかなくて図書館でいろいろと本を探したのですが見つかりませんでした。誰か教えていただけませんか?
/*1*/
import java.net.*;
import java.io.*;
public class udpechoServer{
static final int echo_PORT = 7; //エコーポート番号
static final int BUFSIZE = 1024; //バッファサイズ
public static void main(String[] args) throws IOException{
int port = echo_PORT; //ポート番号
int cliport; //クライアントポート番号
int len; //データ長
int i; //キーインバッファクリアインデックス
DatagramSocket sock = null; //データグラムソケット宣言,初期化
byte[] buf = new byte[BUFSIZE];
byte[] wbuf = new byte[BUFSIZE];
String recvdata; //受信データ
try{
sock = new DatagramSocket(port);
DatagramPacket recvpacket = new DatagramPacket(buf,BUFSIZE);
DatagramPacket sendpacket = new DatagramPacket(buf,BUFSIZE);
System.out.println("Connected to echo server");
while(true){
sock.receive(recvpacket); //データ受信
recvdata = new String(recvpacket.getData(),0,recvpacket.getLength());
recvdata = recvdata.trim(); //トリミング(CRLF)
wbuf = recvdata.getBytes(); //文字列→バイト配列変換
i = 0;
len = wbuf.length;
buf = new byte[BUFSIZE];
while(wbuf[i] != 0x0d){ //途中のCR検出
buf[i] = wbuf[i]; //データコピー
i++;
if(i >=len){
break;
}
}
recvdata = new String(buf,0,i); //バイト配列→文字列変換
System.out.println(recvdata); //画面出力
InetAddress ipadr = recvpacket.getAddress();
cliport = recvpacket.getPort();
buf = recvdata.getBytes();
len = buf.length;
sendpacket = new DatagramPacket(buf,len,ipadr,cliport);
sock.send(sendpacket); //データ送信
recvpacket.setLength(BUFSIZE); //データグラムパケット長リセット
}
}catch(SocketException e){
e.printStackTrace();
}
}
}
/*2 */
import java.io.*;
class FileCopy {
public static void main(String argv[]){
try{
InputStream in = new FileInputStream(argv[0]); //入力ファイルを開く
//BufferedInputStreamオブジェクトの生成
BufferedInputStream bin = new BufferedInputStream(in);
OutputStream out = new FileOutputStream(argv[1]); //出力ファイルを開く
//BufferedOutputStreamオブジェクトの生成
BufferedOutputStream bout = new BufferedOutputStream(out);
byte buf[] = new byte[1024];
int c;
//読み込みデータがなくなるまで読み込み
while((c = bin.read(buf, 0, buf.length)) != -1){
bout.write(buf, 0, c); //データの書き込み処理
}
System.out.println("\""+argv[0]+"\" was converted into \""+argv[1]+"\"");
bin.close(); //入力ファイルを閉じる
bout.close(); //出力ファイルを閉じる
}catch(Exception e){}
}
}
お礼
返事が遅くなって申し訳ありません。 返信通知が何故か来なかったもので……。 それで試してみたのですが、駄目でした。 取り敢えず、最後の手段としてフルパスで入れてみたら、 表示されたんですけど、これ以外のパスの設定は無いモノでしょうか。 まぁ、あまり多用するプログラムでも無いと思うので、質問に答えて頂けた事にお礼申し上げます。