Text
/**
* <p>Title: 启动网络监听端口服务器的程式</p>
* <p>Description: 负责启动网络监听端口服务器的任务</p>
* <p>Copyright: Copyright (c) 2012</p>
* <p>Company: 海鸟软件工作室</p>
* @author 海鸟
* @version 1.1
*/
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
new Server(8080).execute(); //端口可自拟,此例8080
}catch(IOException e){
e.printStackTrace();
}
}
}
/**
* <p>Title: 海鸟软件工作室网络监听端口服务器</p>
* <p>Description: 负责监听客户端请求的信息,并发送到具体的实现程式</p>
* <p>Copyright: Copyright (c) 2012</p>
* <p>Company: 海鸟软件工作室</p>
* @author 海鸟
* @version 1.1
*/
import java.net.Socket;
import java.net.ServerSocket;
import java.io.IOException;
public class Server {
private final int portnumber; //监听的端口
public Server(int portnumber) {
this.portnumber = portnumber;
}
public void execute() throws IOException {
ServerSocket serverSocket = new ServerSocket(portnumber);
System.out.println("监听端口:"+serverSocket);
Thread serviceThread = null;
try {
while(true){
System.out.println("开始接收...");
Socket clientSocket = serverSocket.accept();
System.out.println("连接到客户端:"+clientSocket);
serviceThread = new ServiceThread(clientSocket);
serviceThread.start();
}
}catch(IOException e){
e.printStackTrace();
}finally{
serverSocket.close();
}
}
}
/**
* <p>Title: 海鸟软件工作室上传下载服务器多线程实现程式</p>
* <p>Description: 负责接收并解释客户端请求的信息,并发送回一个web信息。</p>
* <p>Copyright: Copyright (c) 2012</p>
* <p>Company: 海鸟软件工作室</p>
* @author 海鸟
* @version 1.1
*/
import java.net.Socket;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.util.HashMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;
class ServiceThread extends Thread { //支持多线程
Socket clientSocket;
HashMap events = null;
public ServiceThread(Socket clientSocket) {
this.clientSocket = clientSocket;
System.out.println(Thread.currentThread().getName()+":Service.service("+clientSocket+") BEGIN");
}
public void run() {
try{
InputStreamReader reader = new InputStreamReader(clientSocket.getInputStream(),"UTF-8");
BufferedReader input = new BufferedReader(reader);
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
out.writeBytes("HTTP/1.0 200 OK\r\n");
out.writeBytes("Content-type: text/html\r\n");
out.writeBytes("\r\n");
out.writeBytes("<html><head><title>kzzsd.com</title></head><body>\r\n");
String linetext = null;
while (input.ready()) {
linetext = input.readLine(); //controller?event=EE21E&filename=3&name=9
if(linetext.indexOf("event=")!=-1){
events = new HashMap();
int startpos = 0;
int endpos = 0;
String helper,command;
StringTokenizer st1 = new StringTokenizer(linetext,"&");
while(st1.hasMoreTokens()) {
helper = st1.nextToken();
if(helper.indexOf("event=")!=-1)startpos=helper.indexOf("event=");
endpos = helper.indexOf("=",startpos);
command = helper.substring(startpos,endpos).trim();
startpos = endpos+1;
endpos = helper.indexOf(" ",startpos)!=-1?helper.indexOf(" ",startpos):helper.length();
events.put(command,helper.substring(startpos,endpos).trim());
startpos = 0;
}
break;
}
out.writeBytes(linetext); //显示获取网络内容
out.flush();
out.writeBytes("\r\n");
}
if(events!=null){
Set set = events.entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
out.writeBytes("command:(" + events.size() + ")" + me.getKey() + "=" + me.getValue()+"<br />");
out.flush();
out.writeBytes("\r\n");
}
}
out.writeBytes("</body></html>");
reader.close();
}catch(IOException e){
System.out.println(e.getMessage());
}finally{
try{
clientSocket.close();
}catch(IOException e){
System.out.println(e.getMessage());
}
}
}
}