import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class SimpleServer extends Thread{
private static final int DEFAULT_PORT = 6666;
private static final String DEFAULT_FILE_NAME = "made.docx";
private Socket socket;
public SimpleServer(Socket socket){
this.socket = socket;
start();
}
@Override
public void run() {
System.out.println("Connected from " + socket.getRemoteSocketAddress());
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
String inputLine, outputLine;
HandleInput handleInput = new HandleInput();
outputLine = handleInput.handle(null);
out.println(outputLine);
while((inputLine = in.readLine()) != null){
outputLine = handleInput.handle(inputLine);
out.println(outputLine);
out.flush();
if(outputLine.equals("bye"))
break;
if(outputLine.equals("password:valid")){
//prepare for the transmission of the file
Thread.sleep(2000);
InputStream fileInput = new FileInputStream(new File(DEFAULT_FILE_NAME));
OutputStream fileOutput = new DataOutputStream(
new BufferedOutputStream(socket.getOutputStream()));
byte[] buf = new byte[2048];
//transmit the file
int num = fileInput.read(buf);
while(num != -1){
fileOutput.write(buf, 0, num);
fileOutput.flush();
num = fileInput.read(buf);
}
fileInput.close();
fileOutput.close();
}
}
in.close();
out.close();
System.out.println("Disconnected from " + socket.getRemoteSocketAddress());
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class HandleInput{
private Map userInfo = new HashMap();
private String username = "";
private String password = "";
public HandleInput(){
userInfo.put("me", "me");
userInfo.put("abc", "abc");
userInfo.put("123", "123");
}
public String handle(String input){
String output = "";
if(input == null)
output = "Hi";
else if(input.startsWith("username")){
username = input.split(":")[1];
if(userInfo.containsKey(username))
output = "username:valid";
else
output = "username:invalid";
}else if(input.startsWith("password")){
password = input.split(":")[1];
if(userInfo.get(username).equals(password))
output = "password:valid";
else
output = "password:invalid";
}else if(input.equals("bye")){
output = "bye";
}
return output;
}
}
public static void main(String[] args) {
int port = DEFAULT_PORT;
if(args.length > 0){
port = Integer.parseInt(args[0]);
}
try {
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server Started");
try {
while(true){
Socket theSocket = serverSocket.accept();
try {
new SimpleServer(theSocket);
} catch (Exception e) {
e.printStackTrace();
theSocket.close();
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if(serverSocket != null)
serverSocket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 1
- 2
- 3
前往页