witam,
na poczatku zaznacze ze jestem poczatkujacym programista. mam nastepujacy problem, naisalem aplikacje klient-serwer ktora ma za zadanie:
-najpierw zalogowac uzytkownika (login i haslo uzytkownika trzymane sa w pliku o nazwie login.txt) i to akurat dziala
-"pobrac" plik z servera zostawiajac oczywiscie zrodlo i ta opcja nie dziala. Plik o wpisanej nazwie jet tworzony, ale nic w nim nie ma.
kod servera:
//Server code for file transfer application
import java.io.;
import java.net.;
public class SFTP1Server extends Thread
{
private Socket connection;
private File currentDirectory;
//Constructor to instantiate a server socket
public SFTP1Server(Socket conn)
{
connection = conn;
}
//Server definition
public void run()
{
try
{
//Initialise variables
String returnValue = null;
File fileObj, dir;
String uName, pWord;
//Setup input and output streams for communication with client
BufferedReader in = new BufferedReader
(new InputStreamReader(connection.getInputStream()));
OutputStream out = connection.getOutputStream();
PrintWriter pWriter=new PrintWriter(out);
FileInputStream fileIn;
//Create buffer for output to client
byte[] buffer = new byte[1024];
int count;
//Setup BufferedReader and read login details from text file
BufferedReader inFromFile = new BufferedReader
(new FileReader("login.txt"));
uName = inFromFile.readLine();
pWord = inFromFile.readLine();
//Read login details from client
String userName = in.readLine();
String password = in.readLine();
//Check username and password and return authentication
//status to client
if(!(userName.equals(uName))||!(password.equals(pWord)))
{
returnValue = "f";
System.out.println("Transaction refused");
}
else
{
returnValue = "t";
System.out.println("Transaction accepted with user " + userName);
}
pWriter.println(returnValue);
pWriter.flush();
try
{
//Read file/directory name from client
String fileName = in.readLine();
fileObj = new File(fileName);
//If file is a directory, return file/directory status
//to client, followed by a list of files
if(fileObj.isDirectory())
{
returnValue = "dir";
pWriter.println(returnValue);
System.out.println("Client lists directory: "+fileName);
File[] files = fileObj.listFiles();
pWriter.println(files.length);
for(int i=0; i<files.length; i++)
{
pWriter.println(files[i]);
}
pWriter.flush();
}
//If file is a file, send bytes to client via OutputStream
else
{
System.out.println("Client downloads file: "+fileName);
//fileIn = new FileInputStream(fileObj);
//File outputFile = new File("destinationfile.txt");
//FileReader in = new FileReader(inputFile);
//FileWriter out = new FileWriter(outputFile);
//int c;
//while ((c = in.read()) != -1)
//out.write(c);
//in.close();
//out.close();
fileIn = new FileInputStream(fileObj);
while ((count = fileIn.read(buffer)) != -1)
out.write(buffer,0,count);
fileIn.close();
}
//Close input and output streams and close connection
//to indicate end of transaction
out.close();
in.close();
connection.close();
}
//Catch possible FileNotFoundException, print error message
//to server side and send error status to client
catch (FileNotFoundException nf)
{
System.out.println("File Not Found");
pWriter.println("error");
}
}
//Catch any exceptions and print error to screen
catch (IOException e) { System.err.println(e); }
}
public static void main(String args[])
{
try
{
//Create a new ServerSocket bound to specified port and accept
//client connection on that ServerSocket
ServerSocket server = new ServerSocket(2037);
while (true)
{
Socket connection = server.accept();
//Create a new thread for each client connection
SFTP1Server t = new SFTP1Server(connection);
t.start();
}
}
//Catch any exceptions and print error to screen
catch (IOException e) { System.err.println(e); }
}
}
kod klienta:
//Client code for file transfer application
import java.net.;
import java.io.;
public class SFTP1Client
{
public static void main(String args[])
{
try
{
//Initialise variables
String returnValue;
PrintWriter out;
Socket sock;
InputStream in;
//Setup BufferedReader for user input via keyboard
BufferedReader kbd= new BufferedReader
(new InputStreamReader(System.in));
BufferedReader input;
String userName;
String password;
//Get username and password from kbd and send to server
System.out.print("Username: ");
userName = kbd.readLine();
System.out.print("Password: ");
password = kbd.readLine();
while (true)
{
int count;
//Initialise byte array for incomming bytes from server
byte[] data = new byte[1024];
int port = 1523;
//Create socket on localhost machine and bind to
//specified port number
sock = new Socket("localhost", port);
//Get input stream from socket
in = sock.getInputStream();
//Create print writer to write to socket
out = new PrintWriter
(new OutputStreamWriter(sock.getOutputStream()));
//Get buffered data stream from socket
input = new BufferedReader(new InputStreamReader(in));
//Send username and password to server
out.println(userName);
out.println(password);
out.flush();
//Get authorisation status from server
returnValue = input.readLine();
//If authorisation granted, output message
if(returnValue.equals("t"))
{
System.out.println("Connection Authenticated...");
}
//If authorisation denied, output refusal message and
//re-prompt for username and password
else
{
System.out.println("Connection refused...");
//get username from kbd
System.out.print("Username: ");
userName = kbd.readLine();
//get password from kbd
System.out.print("Password: ");
password = kbd.readLine();
continue;
}
{
//Get file/directory name from user and sent to server
System.out.print("Filename: ");
String fileName = kbd.readLine();
out.println(fileName);
out.flush();
//Read file/directory status from server
returnValue = input.readLine();
//If error returned, output error message
if(returnValue.equals("error"))
System.out.println("File Not Found");
//If file is a directory, list directory on screen
else if(returnValue.equals("dir"))
{
System.out.println("File "+fileName+" is a directory\n");
int filesLength = Integer.parseInt(input.readLine());
int i;
for(i=0;i<filesLength;i++)
{
String line = input.readLine();
System.out.println(line);
}
}
//If file is a file, read incoming bytes and
//write to file named by user
else
{
FileOutputStream fileo = new FileOutputStream(new File(fileName));
PrintStream p = new PrintStream(fileo);
while (true)
{
count = in.read(data,0,1024);
if(count<=0)
break;
fileo.write(data,0,count);
}
//Close PrintWriter
p.close();
}
//Close input and output streams and close socket
out.close();
in.close();
sock.close();
}
}
}
//Catch exception and print message and error to screen
catch (IOException e)
{
System.out.println("Error has occurred!");
System.err.println(e);
}
}
}
bardzo prosze o szybka pomoc. z gory dziekuje
Pozdrawiam
Wooju