미안하지만 질문을 변경했습니다.소켓을 통한 파일 전송
이 code 파일이 처음으로 전송되는 경우 (전송중인 파일 수와 상관없이) 코드가 제대로 작동합니다. 그러나 FileSender를 루프로 보내서 파일을 하나씩 보내면 첫 번째 전송 후 수신자 측에서받은 데이터는 임의적입니다 (디버깅 중에 선택하면). 파일을 수신하지도 않습니다. 여기 내가 한 변화와 효과가없는 것입니다. FileSender.java
import java.io.OutputStream;
import java.io.File;
import java.net.Socket;
public class FileSender {
public void main(Socket socket,String[] args) {
try {
OutputStream os = socket.getOutputStream();
int cnt_files = args.length;
// How many files?
ByteStream.toStream(os, cnt_files);
for (int cur_file=0; cur_file<cnt_files; cur_file++) {
ByteStream.toStream(os, new File(args[cur_file]).getName());
ByteStream.toStream(os, new File(args[cur_file]));
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
문자열 [] 인수의 파일 경로가 전송되도록 포함.
FileReceiver.java
import java.io.File;
import java.io.InputStream;
import java.net.Socket;
public class FileReceiver {
public void main(Socket socket,String arg) {
try {
InputStream in = socket.getInputStream();
int nof_files = ByteStream.toInt(in);
System.out.println("reach 1 "+ nof_files);
for (int cur_file=0;cur_file < nof_files; cur_file++) {
String file_name = ByteStream.toString(in);
File file=new File(arg+file_name);
System.out.println("Received path is : "+file);
ByteStream.toFile(in, file);
}
}
catch (java.lang.Exception ex) {
ex.printStackTrace(System.out);
}
}
}
인수는 파일이 저장되어야하는 경로가 포함되어 있습니다.
나는 주된 기능을 내가 파일을 전송하려고 할 때마다 언급하고 싶다. 기본적으로 디렉토리를 포함 할 수있는 여러 파일을 전송하려고합니다. 이렇게하려면 다음 코드를 작성했습니다. 내가 틀렸다면
ServerFile.java
import java.io.*;
import java.net.*;
public class ClientFile implements Runnable{
Socket clientsocket;
public void run() {
try
{
clientsocket = new Socket("219.64.189.14",6789);
// Some code
copy(outtoserver,infromserver, files); // files contains the path of files to be transferred.
// Some code
clientsocket.close();
}
catch(Exception e2)
{
System.out.println("ClientFile "+String.valueOf(e2) + "\n");
}
}
public void copy(DataOutputStream outtoserver,BufferedReader infromserver,String[] files)
{
try
{
FileSender fs = new FileSender();
int totalfiles=0;
int r=0;
File oldfile;
outtoserver.write(files.length);
String chk;
while(totalfiles<files.length)
{
oldfile = new File(files[totalfiles]);
if(oldfile.isDirectory())
{
outtoserver.writeBytes("folder\n");
File folder1[] = oldfile.listFiles();
String[] folder = new String[folder1.length];
int count=0;
for(File name : folder1)
{
folder[count] = name + "";
System.out.println(folder[count]);
count++;
}
outtoserver.writeBytes(oldfile.getName()+"\n");
fs.main(clientsocket, folder);
}
else if(oldfile.isFile())
{
outtoserver.writeBytes("file\n");
chk = infromserver.readLine();
if(chk.equals("send"))
{
outtoserver.writeBytes(oldfile.getName()+"\n");
String[] folder = new String[]{oldfile.getAbsolutePath()};
fs.main(clientsocket, folder);
}
totalfiles++;
outtoserver.flush();
}
}
}
catch(Exception e)
{
System.out.println("ClientFile -->> "+e.toString());
}
}
}
ClientFile.java
import java.io.*;
import java.net.*;
import javax.swing.*;
class ServerFile implements Runnable {
Socket conn;
public ServerFile(Socket a)
{
conn = a;
}
public void run() {
File file1;
String clientsen="";
try
{ // Some code
copy(outtoclient,infromclient,file1.getAbsolutePath()); //file1 is the directory to which the file has to stored.
// some code
}
catch(Exception e0)
{
System.out.println("ServerFile "+String.valueOf(e0)+"\n"+e0.getCause());
}
}//end main
public void copy(DataOutputStream outtoclient,BufferedReader infromclient,String basepath)
{
try
{
FileReceiver fr = new FileReceiver();
int totfiles = infromclient.read();
int tot=0;
File file;
String path = null,chk;
while(tot<totfiles)
{
chk = infromclient.readLine();
if(chk.equals("file"))
{
outtoclient.writeBytes("send\n");
path = infromclient.readLine();
path = basepath+File.separator+path;
file=new File(path);
fr.main(conn, basepath+File.separator);
}
else if(chk.equals("folder"))
{
String name = infromclient.readLine();
name = basepath+File.separator+name;
new File(name).mkdir();
fr.main(conn, name+File.separator);
}
tot++;
}
}
catch(Exception e)
{
System.out.println("Server file: "+e.toString());
}
}
}//end class
꼭 저를 수정합니다.
도움을 주시면 감사하겠습니다.
없음이 클래스가 무엇 단서, 또는 어떤 다른 쪽 끝은 같다. 하지만 당신이 사용하는 코드가 이것이라고 추측하겠습니까? http://www.adp-gmbh.ch/blog/2004/november/15.html (죄송합니다. 게시물의 링크를 알지 못했습니다.) –
네, 그게 제가 언급 한 것입니다. – pankaj
'cnt_files '이란 무엇입니까? 루프가 동일한 파일을 반복적으로 보내는 것 같습니다. * complete * main 메소드를 보여줄 수 있다면, 정말 도움이 될 것입니다. –