Advertisement
Guest User

Untitled

a guest
Feb 14th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.90 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.DataInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.InputStreamReader;
  10. import java.io.OutputStream;
  11. import java.io.PrintWriter;
  12. import java.net.ServerSocket;
  13. import java.net.Socket;
  14. import java.util.Arrays;
  15.  
  16. public class Server{
  17.  
  18. public static void main(String[] args) {
  19. ServerSocket server = null;
  20. Socket client = null;
  21. int port = 6789;
  22. InputStream in = null;
  23. OutputStream out = null;
  24.  
  25. try {
  26. server = new ServerSocket(port);
  27.  
  28. System.out.println("Awayting connection");
  29.  
  30. if (server != null) {
  31. client = server.accept();
  32. }
  33.  
  34. System.out.println("Connected with client");
  35.  
  36. in = client.getInputStream();
  37.  
  38. out = client.getOutputStream();
  39.  
  40. BufferedReader clientReader = null;
  41.  
  42. if (in != null) {
  43. clientReader = new BufferedReader(new InputStreamReader(in));
  44. }
  45.  
  46. if (clientReader != null) {
  47. String line;
  48. while ((line = clientReader.readLine()) != null) {
  49.  
  50. // Client request file list
  51. if (line.equals("list")) {
  52. System.out.println("Sending client file list");
  53. String[] fileList = new File("server").list();
  54. PrintWriter output = new PrintWriter(out, true);
  55.  
  56. // Print formated fileList to stream
  57. for (int i = 0; i < fileList.length; i++) {
  58. output.println(i + ". " + fileList[i]);
  59. }
  60. output.println("-end-");
  61. System.out.println("File list sent");
  62. } // End file list
  63.  
  64. // Client downloading file
  65. if (line.equals("get")) {
  66. String fileName = clientReader.readLine();
  67.  
  68. System.out.println("Client requested - " + fileName);
  69.  
  70. File file = new File("server\\" + fileName);
  71.  
  72. System.out.println("File length " + file.length());
  73. FileInputStream fis = new FileInputStream(file);
  74. byte[] buffer = new byte[4096];
  75.  
  76. // Send file length to client
  77. PrintWriter output = new PrintWriter(out, true);
  78. output.println(file.length());
  79.  
  80. int count;
  81. while ((count = fis.read(buffer)) > 0) {
  82. System.out.println("writing " + count + " bytes");
  83. if (count < 4096) {
  84. buffer = Arrays.copyOf(buffer, count);
  85. }
  86. out.write(buffer);
  87. out.flush();
  88. }
  89. System.out.println("flush to stream");
  90.  
  91. fis.close();
  92. }
  93.  
  94. // Client upload file
  95. if (line.equals("put")){
  96. boolean error = false;
  97. String fileName = clientReader.readLine();
  98.  
  99. System.out.println("Client uploading - "+fileName);
  100. String errorCheck = clientReader.readLine();
  101. int fileSize = -1;
  102. if (!errorCheck.equals("-CLIENT ERROR-")){
  103. fileSize = (int) Float.parseFloat(errorCheck);
  104. }else{
  105. error = true;
  106. String errorLine;
  107. while((errorLine = clientReader.readLine()) != null){
  108. if (errorLine.equals("-end-")){
  109. break;
  110. }else{
  111. System.out.println(errorLine);
  112. }
  113. }
  114. }
  115.  
  116. if(!error){
  117. System.out.println("file size "+fileSize);
  118.  
  119. File file = new File("server\\" + fileName);
  120.  
  121. FileOutputStream fos = new FileOutputStream(file);
  122. DataInputStream dis = new DataInputStream(client.getInputStream());
  123.  
  124. byte[] buffer = new byte[4096];
  125. int readBytes = 0;
  126. int count;
  127. while((count=dis.read(buffer)) > 0){
  128. System.out.println("Reading "+count+" Bytes");
  129. if (count < 4096){
  130. buffer = Arrays.copyOf(buffer, count);
  131. }
  132. fos.write(buffer);
  133. fos.flush();
  134.  
  135. readBytes += count;
  136. System.out.println("Read a total of " + readBytes + " bytes");
  137. if (readBytes == fileSize) {
  138. break;
  139. }
  140. buffer = new byte[4096];
  141. }
  142. System.out.println("Flush to file");
  143. fos.close();
  144.  
  145. }
  146.  
  147.  
  148. }
  149.  
  150. // Client request exit
  151. if (line.equals("exit")) {
  152. System.out.println("Client request exit -> exiting");
  153. break;
  154. }
  155. }
  156. }
  157.  
  158. if (clientReader != null) {
  159. clientReader.close();
  160. }
  161.  
  162. if (in != null) {
  163. in.close();
  164. }
  165.  
  166. if (out != null) {
  167. out.close();
  168. }
  169. } catch (NumberFormatException e) {
  170. e.printStackTrace();
  171. sendError(e, out);
  172. } catch (FileNotFoundException e) {
  173. e.printStackTrace();
  174. sendError(e, out);
  175. } catch (IOException e) {
  176. e.printStackTrace();
  177. sendError(e, out);
  178. } catch (Exception e) {
  179. e.printStackTrace();
  180. sendError(e, out);
  181. }
  182.  
  183. }
  184.  
  185. public static void sendError(Exception e, OutputStream out) {
  186. PrintWriter pw = new PrintWriter(out, true);
  187. pw.println("-SERVER ERROR-");
  188. e.printStackTrace(pw);
  189. pw.println("-end-");
  190. }
  191.  
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement