esoe 2 years ago
parent
commit
ee8e1d78cf
  1. 2
      src/main/java/ru/molokoin/App.java
  2. 31
      src/main/java/ru/molokoin/ExchangeServer.java
  3. 9
      src/main/java/ru/molokoin/MainFrameController.java
  4. 13
      src/main/java/ru/molokoin/SystemInfo.java
  5. 220
      src/main/java/ru/molokoin/UploadServer.java
  6. BIN
      target/classes/ru/molokoin/ExchangeServer.class
  7. BIN
      target/classes/ru/molokoin/MainFrameController.class
  8. BIN
      target/classes/ru/molokoin/SystemInfo.class
  9. BIN
      target/classes/ru/molokoin/example/UploadServer.class

2
src/main/java/ru/molokoin/App.java

@ -9,7 +9,7 @@ import javafx.stage.Stage; @@ -9,7 +9,7 @@ import javafx.stage.Stage;
/**
* JavaFX App
*
*/
public class App extends Application {

31
src/main/java/ru/molokoin/ExchangeServer.java

@ -16,15 +16,17 @@ public class ExchangeServer extends Thread{ @@ -16,15 +16,17 @@ public class ExchangeServer extends Thread{
private int port = 8081;
private int num = 0;
public static boolean isActive;
public ServerSocket serverSocket;
public Socket socket;
public static ServerSocket serverSocket;
public static Socket socket;
ExchangeServer(){
ExchangeServer() throws Exception{
isActive = true;
serverSocket = new ServerSocket(port);
}
ExchangeServer (int port){
ExchangeServer (int port) throws Exception{
isActive = true;
setPort(port);
serverSocket = new ServerSocket(port);
}
/**
* @return the port
@ -39,18 +41,20 @@ public class ExchangeServer extends Thread{ @@ -39,18 +41,20 @@ public class ExchangeServer extends Thread{
this.port = port;
}
//осановка сервера
public void finish(){
public void finish() throws Exception{
isActive = false;
}
public void connect() throws Exception{}
//запуск сервера
@Override
public void run(){
System.out.printf("%s started... \n", Thread.currentThread().getName());
try (ServerSocket serverSocket = new ServerSocket(port)) {
try {
System.out.println("Server started at port: " + port + " ...");
while (isActive) {
do {
if (isActive){
// ожидаем подключения
Socket socket = serverSocket.accept();
System.out.println("Client connected ...");
@ -110,14 +114,25 @@ public class ExchangeServer extends Thread{ @@ -110,14 +114,25 @@ public class ExchangeServer extends Thread{
System.out.println("num: " + num);
}
}
else {
System.out.printf("%s finished... \n", Thread.currentThread().getName());
serverSocket.close();
socket.close();
return; //завершение потока
}
} while (true);
//serverSocket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
try {
new ExchangeServer().start();
} catch (Exception e) {
System.out.println(e);
}
}
}

9
src/main/java/ru/molokoin/MainFrameController.java

@ -19,7 +19,11 @@ public class MainFrameController implements Initializable{ @@ -19,7 +19,11 @@ public class MainFrameController implements Initializable{
@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println("Инициализация компонентов интерфейса ...");
try {
server = new ExchangeServer();
} catch (Exception ex) {
System.out.println(ex);
}
}
@FXML
@ -28,10 +32,15 @@ public class MainFrameController implements Initializable{ @@ -28,10 +32,15 @@ public class MainFrameController implements Initializable{
btn.setText("STOP");
server.start();
}else {
btn.setText("START");
try {
server.finish();
} catch (Exception ex) {
System.out.println(ex);
}
}
}
}

13
src/main/java/ru/molokoin/SystemInfo.java

@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
package ru.molokoin;
public class SystemInfo {
public static String javaVersion() {
return System.getProperty("java.version");
}
public static String javafxVersion() {
return System.getProperty("javafx.version");
}
}

220
src/main/java/ru/molokoin/UploadServer.java

@ -1,220 +0,0 @@ @@ -1,220 +0,0 @@
package ru.molokoin;
/**
UploadServer program - simple file upload web-server
Author: Denis Volkov (c) 2007
For information and support visit http://www.denvo.ru
This program is FREEWARE, you are free to use any part of code
as well as whole program in your development provided that you
remain original copyrights and site name in your source.
The product is distributed "as is". The author of the Product will
not be liable for any consequences, loss of profit or any other kind
of loss, that may occur while using the product itself and/or together
with any other software.
*/
import java.net.*;
import java.io.*;
import java.security.*;
import java.util.*;
import java.util.regex.*;
import java.nio.charset.*;
public class UploadServer extends Thread
{
private final static String httpHeader = "HTTP/1.1 200 OK\r\n"
+ "Content-Type: text/html\r\n"
+ "\r\n";
private final static String uploadFormString = httpHeader
+ "<form method=\"POST\" enctype=\"multipart/form-data\">\r\n"
+ "<input type=\"file\" name=\"upload_file\" size=100>\r\n"
+ "<input type=\"submit\" value=\"Upload\">\r\n"
+ "</form>\r\n\r\n";
private final Charset streamCharset = Charset.forName("ISO-8859-1");
private ServerSocket serverSocket;
private Socket clientSocket;
UploadServer(int port) throws Exception
{
serverSocket = new ServerSocket(port);
System.err.println("Server ready @" + port);
}
public void run()
{
while(true)
{
try
{
clientSocket = serverSocket.accept();
System.err.println("Client connection accepted from "
+ clientSocket.getInetAddress().toString());
// Read and process data from socket
processConnection();
}
catch(Exception e)
{
System.err.println("Exception in run's main loop");
e.printStackTrace();
}
// Close socket
try
{
clientSocket.close();
}
catch(Exception e) { }
System.err.println("Client connection closed");
}
}
private void processConnection() throws Exception
{
InputStream inStream = clientSocket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inStream, streamCharset));
OutputStream out = clientSocket.getOutputStream();
// Read requiest header
String headerLine, firstLine = null;
Map headerData = new TreeMap();
Pattern headerPattern = Pattern.compile("([^\\:]+)\\:(.*)");
while((headerLine = in.readLine()).length() > 0)
{
if(firstLine == null)
firstLine = headerLine;
else
{
Matcher m = headerPattern.matcher(headerLine);
if(m.matches())
{
headerData.put(m.group(1).trim(), m.group(2).trim());
}
}
System.out.println("HEADER: " + headerLine);
}
// Process first line of request
if(firstLine.startsWith("GET"))
{
System.out.println("Send upload form");
// Show upload form
out.write(uploadFormString.getBytes());
}
else if(firstLine.startsWith("POST"))
{
// Get body info
int contentLength = Integer.parseInt((String)(headerData.get("Content-Length")));
String contentType = (String)(headerData.get("Content-Type"));
String boundary = "\r\n--" + contentType.substring(contentType.indexOf("boundary=") + 9) + "--";
System.out.println("File upload, reading body: " + contentLength + " bytes");
// Prepare to reading
Pattern fileNamePattern = Pattern.compile("filename=\"([^\"]+)\"");
OutputStreamWriter writer = null;
MessageDigest digestMD5 = MessageDigest.getInstance("MD5");
String fileName = null;
String prevBuffer = "";
char[] buffer = new char[16 << 10];
int totalLength = contentLength;
// Reading loop
while(contentLength > 0)
{
if(writer == null)
{
// Read strings
String bodyLine = in.readLine();
contentLength -= bodyLine.length() + 2;
// Find name of file
if(bodyLine.length() > 0)
{
Matcher m = fileNamePattern.matcher(bodyLine);
if(m.find())
{
fileName = m.group(1);
}
}
else if(fileName != null)
{
OutputStream stream = new FileOutputStream(fileName);
if(digestMD5 != null)
stream = new DigestOutputStream(stream, digestMD5);
writer = new OutputStreamWriter(stream, streamCharset);
}
else
throw new RuntimeException("Name of uploaded file not found");
}
else
{
// Read data from stream
int readLength = Math.min(contentLength, buffer.length);
readLength = in.read(buffer, 0, readLength);
if(readLength < 0)
break;
contentLength -= readLength;
// Find boundary string
String curBuffer = new String(buffer, 0, readLength);
String bothBuffers = prevBuffer + curBuffer;
int boundaryPos = bothBuffers.indexOf(boundary);
if(boundaryPos == -1)
{
writer.write(prevBuffer, 0, prevBuffer.length());
prevBuffer = curBuffer;
}
else
{
writer.write(bothBuffers, 0, boundaryPos);
break;
}
}
// Write stats
System.out.print("Read: " + (totalLength - contentLength)
+ " Remains: " + contentLength + " Total: " + totalLength
+ " bytes \r");
}
System.out.println("Done ");
writer.close();
// Finalize digest calculation
byte[] md5Sum = digestMD5.digest();
StringBuffer md5SumString = new StringBuffer();
for(int n = 0; n < md5Sum.length; ++ n)
md5SumString.append(printByte(md5Sum[n]));
// Output client info
String answer = httpHeader + "<p><b>Upload completed, " + totalLength
+ " bytes, MD5 sum: " + md5SumString.toString() + "</b>"
+ "<p><a href=\"/\">Next file</a>\r\n\r\n";
out.write(answer.getBytes());
}
}
private static String printByte(byte b)
{
int bi = ((int)b) & 0xFF;
if(bi < 16)
return "0" + Integer.toHexString(bi);
else
return Integer.toHexString(bi);
}
public static void main(String[] args)
{
try
{
if(args.length < 1)
{
System.out.println("Usage: UploadServer <port>");
int port = 8081;
UploadServer server = new UploadServer(port);
server.start();
return;
}
UploadServer server = new UploadServer(Integer.parseInt(args[0]));
server.start();
}
catch(Exception e)
{
System.err.println("Error in main");
e.printStackTrace();
}
}
}

BIN
target/classes/ru/molokoin/ExchangeServer.class

Binary file not shown.

BIN
target/classes/ru/molokoin/MainFrameController.class

Binary file not shown.

BIN
target/classes/ru/molokoin/SystemInfo.class

Binary file not shown.

BIN
target/classes/ru/molokoin/UploadServer.class → target/classes/ru/molokoin/example/UploadServer.class

Binary file not shown.
Loading…
Cancel
Save