esoe 2 years ago
parent
commit
3a5f166769
  1. BIN
      Miles J. - Unity 3D and PlayMaker Essentials Game Development from Concept to Publishing - 2016.PDF
  2. 28
      src/main/java/ru/molokoin/ExchangeServer.java
  3. 219
      src/main/java/ru/molokoin/UploadServer.java
  4. 7
      src/main/webapp/upload.html
  5. BIN
      target/classes/ru/molokoin/ExchangeServer.class
  6. BIN
      target/classes/ru/molokoin/UploadServer.class
  7. BIN
      target/test-classes/ru/molokoin/AppTest.class

BIN
Miles J. - Unity 3D and PlayMaker Essentials Game Development from Concept to Publishing - 2016.PDF

Binary file not shown.

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

@ -1,6 +1,8 @@
package ru.molokoin; package ru.molokoin;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
@ -9,15 +11,16 @@ import java.net.Socket;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
public class ExchangeServer { public class ExchangeServer {
private static int port = 8081;
public static void main(String[] args) { public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8181)) { try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server started!"); System.out.println("Server started at port: " + port + " ...");
while (true) { while (true) {
// ожидаем подключения // ожидаем подключения
Socket socket = serverSocket.accept(); Socket socket = serverSocket.accept();
System.out.println("Client connected!"); System.out.println("Client connected ...");
// для подключившегося клиента открываем потоки // для подключившегося клиента открываем потоки
// чтения и записи // чтения и записи
@ -34,11 +37,22 @@ public class ExchangeServer {
} }
// отправляем ответ // отправляем ответ
output.println("HTTP/1.1 200 OK"); System.out.println("отправка ответа от сервера:");
output.println("Content-Type: text/html; charset=utf-8"); String path = new File("").getAbsolutePath();
output.println(); String fileName = "upload.html";
output.println("<p>hello-exchange!</p>"); path = path + "/src/main/webapp/";
File file = new File(path + fileName);
try (BufferedReader br = new BufferedReader(new FileReader(file))){
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
output.println(line);
}
output.flush(); output.flush();
}
catch (IOException e) {
e.printStackTrace();
}
// по окончанию выполнения блока try-with-resources потоки, // по окончанию выполнения блока try-with-resources потоки,
// а вместе с ними и соединение будут закрыты // а вместе с ними и соединение будут закрыты

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

@ -0,0 +1,219 @@
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();
}
}
}

7
src/main/webapp/upload.html

@ -0,0 +1,7 @@
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<form enctype="multipart/form-data" method="post">
<p><input type="file" name="f">
<input type="submit" value="send"></p>
</form>

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

Binary file not shown.

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

Binary file not shown.

BIN
target/test-classes/ru/molokoin/AppTest.class

Binary file not shown.
Loading…
Cancel
Save