好的,我在FileClient,ClientConnection和FileServer下面有三个类,其中两个是主类,FileServer首先运行然后运行FileClient。我的多个文件的目录没有被转移到服务器。在我的FileClient类中,我怀疑bytesRead = is.read(mybytearray,0,mybytearray.length)没有读取文件字节,因此我的文件没有正确地传输到服务器。我该如何解决这个问题?
import java.io.*;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class FileClient {
private static Socket sock;
private static String fileName;
private static BufferedReader stdin;
private static PrintStream os;
public static void main(String[] args) throws IOException {
try {
sock = new Socket("localhost", 54997);
stdin = new BufferedReader(new InputStreamReader(System.in));
} catch (Exception e) {
System.err.println("Cannot connect to the server, try again later.");
System.exit(1);
}
os = new PrintStream(sock.getOutputStream());
try {
switch (Integer.parseInt(selectAction())) {
case 1:
os.println("1");
sendFile();
break;
case 2:
//receiveFile();
break;
}
} catch (Exception e) {
System.err.println("not valid input");
}
sock.close();
}
public static String selectAction() throws IOException {
System.out.println("1. Send file.");
System.out.println("2. Recieve file.");
System.out.print("\nMake selection: ");
return stdin.readLine();
}
public static void sendFile() {
try {
byte[] mybytearray = new byte[1024];
InputStream is = sock.getInputStream();
BufferedOutputStream bos = null;
FileOutputStream fos = null;
int bytesRead;
String dirname ="FolderForServer";
File dir = new File(dirname);
dir.mkdirs();
File[] listOfFiles = dir.listFiles();
OutputStream os = sock.getOutputStream();
//Sending file name and file size to the server
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(dir.getName());
dos.writeInt(listOfFiles.length);
for(int j=0; j<listOfFiles.length; j++){
dos.writeUTF(listOfFiles[j].getName());
fos = new FileOutputStream(listOfFiles[j].getPath());
bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray, 0, mybytearray.length);
System.out.printf("see\n");
bos.write(mybytearray, 0, bytesRead);
}
bos.close();
} catch (Exception e) {
System.out.println("File does not exist!");
}
}
}
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class CLIENTConnection implements Runnable {
private Socket clientSocket;
private BufferedReader in = null;
public CLIENTConnection(Socket client) {
this.clientSocket = client;
}
@Override
public void run() {
try {
in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
String clientSelection;
while ((clientSelection = in.readLine()) != null) {
switch (clientSelection) {
case "1":
receiveFile();
break;
case "2":
//sendFile();
break;
default:
System.out.println("Incorrect command received.");
break;
}
in.close();
break;
}
} catch (IOException ex) {
Logger.getLogger(CLIENTConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void receiveFile() {
try {
int bytesRead;
String fileName;
OutputStream output = null;
DataInputStream clientData = new DataInputStream(clientSocket.getInputStream());
BufferedInputStream bis = null;
OutputStream os;
System.out.printf("see\n");
String dirNowInServer = clientData.readUTF();
File dir = new File(dirNowInServer);
dir.mkdirs();
System.out.printf("see\n");
int number = clientData.readInt();
for(int a=0; a<number; a++){
String filename = clientData.readUTF();
System.out.printf("see\n");
File myfile = new File(dirNowInServer + "/" + filename);
while (true) {
// Socket sock = servsock.accept();
byte[] mybytearray = new byte[(int) myfile.length()];
bis = new BufferedInputStream(new FileInputStream(myfile));
bis.read(mybytearray, 0, mybytearray.length);
os = clientSocket.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
clientSocket.close();
}
}
bis.close();
} catch (IOException ex) {
System.err.println("Client error. Connection closed.");
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
private static ServerSocket serverSocket;
private static Socket clientSocket = null;
public static void main(String[] args) throws IOException {
try {
serverSocket = new ServerSocket(54997);
System.out.println("Server started.");
} catch (Exception e) {
System.err.println("Port already in use.");
System.exit(1);
}
while (true) {
try {
clientSocket = serverSocket.accept();
System.out.println("Accepted connection : " + clientSocket);
Thread t = new Thread(new CLIENTConnection(clientSocket));
t.start();
} catch (Exception e) {
System.err.println("Error in connection attempt.");
}
}
}
}