Skip to content

Instantly share code, notes, and snippets.

@kimhu
Last active August 29, 2015 14:02
Show Gist options
  • Save kimhu/404ac3b40ffc2eed0bb5 to your computer and use it in GitHub Desktop.
Save kimhu/404ac3b40ffc2eed0bb5 to your computer and use it in GitHub Desktop.
The Java socket server, the server can accept many http request and client request; when accept http reques, send back http response; when accept client request, the server can reply the client after client input many lines.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package testfile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author kim_hu
*/
public class MuiltiplyServerFinal {
public static void main(String[] args) {
MuiltiplyServerFinal server = new MuiltiplyServerFinal();
server.service();
}
private void service() {
ServerSocket server = null;
try {
server = new ServerSocket(80);
while (true) {
Socket socket = server.accept();
new Thread(new Task(socket)).start();
}
} catch (IOException ex) {
Logger.getLogger(MuiltiplyServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(MuiltiplyServer.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (server != null) {
server.close();
}
} catch (IOException ex) {
Logger.getLogger(MuiltiplyServerFinal.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
class Task implements Runnable {
private Socket client;
public Task(Socket socket) {
this.client = socket;
}
private void handleSocket() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
String header = reader.readLine();
if (header != null) {
new Thread(new HandleRead(client, reader, header)).start();
new Thread(new HandleWrite(client, out, header)).start();
}
} catch (IOException ex) {
Logger.getLogger(MuiltiplyServerFinal.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
handleSocket();
}
}
class HandleWrite implements Runnable {
private Socket client;
private PrintWriter out;
private String header;
public HandleWrite(Socket client, PrintWriter out, String header) {
this.client = client;
this.out = out;
this.header = header;
}
private void handleWrite() {
while (true) {
if (header.contains("HTTP")) {
out.println("HTTP/1.1 200 OK");
out.println("Content-Type:text/html;charset=utf-8");
out.println();
out.println("<head></head>");
out.println("<body>");
out.println("<h1>Hello Word!</h1>");
out.println("</body>");
out.flush();
break;
} else {
Scanner scan = new Scanner(System.in);
String reply = scan.nextLine();
out.println(reply);
out.flush();
if (reply.equals("bye")) {
break;
}
}
}
out.close();
try {
client.close();
} catch (IOException ex) {
Logger.getLogger(MuiltiplyServerFinal.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
handleWrite();
}
}
class HandleRead implements Runnable {
private Socket client;
private BufferedReader reader;
private String header;
public HandleRead(Socket client, BufferedReader reader, String header) {
this.reader = reader;
this.header = header;
this.client = client;
}
private void handleRead() {
try {
System.out.println("the header from the client: " + header);
while (true) {
if (!header.contains("HTTP")) {
String content = reader.readLine();
System.out.println("the content from the client: " + content);
if (content.equals("bye")) {
break;
}
} else {
String content = reader.readLine();
System.out.println("from client: " + content);
if (content.length() == 0) {
System.out.println("break");
break;
}
}
}
reader.close();
client.close();
} catch (IOException ex) {
Logger.getLogger(MuiltiplySocketServer.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (reader != null) {
reader.close();
}
client.close();
} catch (IOException ex) {
Logger.getLogger(MuiltiplySocketServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public void run() {
handleRead();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment