Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.Arrays;
- public class Server{
- public static void main(String[] args) {
- ServerSocket server = null;
- Socket client = null;
- int port = 6789;
- InputStream in = null;
- OutputStream out = null;
- try {
- server = new ServerSocket(port);
- System.out.println("Awayting connection");
- if (server != null) {
- client = server.accept();
- }
- System.out.println("Connected with client");
- in = client.getInputStream();
- out = client.getOutputStream();
- BufferedReader clientReader = null;
- if (in != null) {
- clientReader = new BufferedReader(new InputStreamReader(in));
- }
- if (clientReader != null) {
- String line;
- while ((line = clientReader.readLine()) != null) {
- // Client request file list
- if (line.equals("list")) {
- System.out.println("Sending client file list");
- String[] fileList = new File("server").list();
- PrintWriter output = new PrintWriter(out, true);
- // Print formated fileList to stream
- for (int i = 0; i < fileList.length; i++) {
- output.println(i + ". " + fileList[i]);
- }
- output.println("-end-");
- System.out.println("File list sent");
- } // End file list
- // Client downloading file
- if (line.equals("get")) {
- String fileName = clientReader.readLine();
- System.out.println("Client requested - " + fileName);
- File file = new File("server\\" + fileName);
- System.out.println("File length " + file.length());
- FileInputStream fis = new FileInputStream(file);
- byte[] buffer = new byte[4096];
- // Send file length to client
- PrintWriter output = new PrintWriter(out, true);
- output.println(file.length());
- int count;
- while ((count = fis.read(buffer)) > 0) {
- System.out.println("writing " + count + " bytes");
- if (count < 4096) {
- buffer = Arrays.copyOf(buffer, count);
- }
- out.write(buffer);
- out.flush();
- }
- System.out.println("flush to stream");
- fis.close();
- }
- // Client upload file
- if (line.equals("put")){
- boolean error = false;
- String fileName = clientReader.readLine();
- System.out.println("Client uploading - "+fileName);
- String errorCheck = clientReader.readLine();
- int fileSize = -1;
- if (!errorCheck.equals("-CLIENT ERROR-")){
- fileSize = (int) Float.parseFloat(errorCheck);
- }else{
- error = true;
- String errorLine;
- while((errorLine = clientReader.readLine()) != null){
- if (errorLine.equals("-end-")){
- break;
- }else{
- System.out.println(errorLine);
- }
- }
- }
- if(!error){
- System.out.println("file size "+fileSize);
- File file = new File("server\\" + fileName);
- FileOutputStream fos = new FileOutputStream(file);
- DataInputStream dis = new DataInputStream(client.getInputStream());
- byte[] buffer = new byte[4096];
- int readBytes = 0;
- int count;
- while((count=dis.read(buffer)) > 0){
- System.out.println("Reading "+count+" Bytes");
- if (count < 4096){
- buffer = Arrays.copyOf(buffer, count);
- }
- fos.write(buffer);
- fos.flush();
- readBytes += count;
- System.out.println("Read a total of " + readBytes + " bytes");
- if (readBytes == fileSize) {
- break;
- }
- buffer = new byte[4096];
- }
- System.out.println("Flush to file");
- fos.close();
- }
- }
- // Client request exit
- if (line.equals("exit")) {
- System.out.println("Client request exit -> exiting");
- break;
- }
- }
- }
- if (clientReader != null) {
- clientReader.close();
- }
- if (in != null) {
- in.close();
- }
- if (out != null) {
- out.close();
- }
- } catch (NumberFormatException e) {
- e.printStackTrace();
- sendError(e, out);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- sendError(e, out);
- } catch (IOException e) {
- e.printStackTrace();
- sendError(e, out);
- } catch (Exception e) {
- e.printStackTrace();
- sendError(e, out);
- }
- }
- public static void sendError(Exception e, OutputStream out) {
- PrintWriter pw = new PrintWriter(out, true);
- pw.println("-SERVER ERROR-");
- e.printStackTrace(pw);
- pw.println("-end-");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement