⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java.svn-base

📁 利用J2ME编写的手机应用程序。 功能包括显示图片
💻 SVN-BASE
字号:
package wFramework;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import javax.microedition.io.*;

import org.kxml2.io.KXmlParser;

/**
 * Server thread class..
 * @author Marius Bj鴕ge
 *
 */
public class Server extends Thread 
{
	private ServerSocketConnection ssc;
	private SocketConnection socket;
	private DataInputStream input;
	private boolean runServer;
	private XMLServerListener listener;
	
	public Server(XMLServerListener listener)
	{
		runServer = true;
		this.listener = listener; 
		setupServer();
	}
	
	public Server()
	{
		runServer = true;
		listener = null; 
		setupServer();
	}
	
	/**
	 * Assigns a listener to the server.
	 * @param listener
	 */
	public void setListener(XMLServerListener listener)
	{
		this.listener = listener;
	}
	
	/**
	 * Stops the server..
	 *
	 */
	public void stopServer()
	{
		runServer = false;
	}

	private void setupServer()
	{
		start();
	}
	
	/**
	 * Parses the request and returns the parameteres, either from a GET or POST..
	 * @param request
	 * @return
	 */
	private String getRequestParams(String request)
	{
		if (request.length() < 5)
			return "";
		
		String params = "";
		if (request.substring(0, 3).equalsIgnoreCase("get"))
		{
			int s = request.indexOf("?") + 1;
			int e = request.indexOf(" HTTP", s);
			params = request.substring(s, e);
		}
		else if (request.substring(0, 4).equalsIgnoreCase("post"))
		{
			int s = request.indexOf("\r\n\r\n") + 4;
			int e = request.indexOf("\r\n");
			if (e < 0)
				e = request.length();
			params = request.substring(s, e);
		}
		return urlDecode(params);
	}

	/**
	 * A simple urldecoder which converts %xx urlencoded characters to their ascii type..
	 * @param enc
	 * @return
	 */
	private String urlDecode(String enc)
	{
		String s = "";
		String hex = "0123456789ABCDEFabcdef"; 
		
		int i = 0;
		while (i < enc.length())
		{
			char c = enc.charAt(i);
			if (c == '+')
			{
				s += " ";
				i++;
			}
			else if (c == '%')
			{
				if (i < (enc.length() - 2)
						&& hex.indexOf(enc.charAt(i + 1)) != -1
						&& hex.indexOf(enc.charAt(i + 2)) != -1)
				{
					String sval = enc.substring(i + 1, i + 3);
					char cval = (char)Long.parseLong(sval, 16);
					s += String.valueOf(cval);
					i += 3;
				}
				else // moving along...
					i++;
			}
			else
			{
				s += String.valueOf(c);
				i++;
			}
		}
		return s;
	}
	
	/**
	 * Method that handles requests. If listener is attached, use it to parse the xml.
	 * @param request
	 * @return
	 * @throws IOException
	 */
	private String handleRequest(String request) throws IOException
	{
		String params = getRequestParams(request);
		StringReader sr = new StringReader(params);
		KXmlParser xml = new KXmlParser();
		xml.setInput(sr);
		
		String output = "";
		
		if (listener != null)
		{
			try
			{
				output = listener.xmlIncoming(xml);
			}
			catch (Exception e)
			{
			}
		}
		else
		{
			try
			{
				int type = xml.nextToken();
				while (type != KXmlParser.END_DOCUMENT)
				{
					if (type == KXmlParser.TEXT)
					{
						for (int i = 0; i < xml.getDepth(); i++)
							output += "  ";
						output += "  " + xml.getText() + "\n";
					}
					else
					{
						for (int i = 0; i < xml.getDepth(); i++)
							output += "  ";
						output += xml.getName() + "\n";
					}
					
					type = xml.nextToken();
				}
			}
			catch (Exception e)
			{
				System.out.println("Exception: " + e.toString());
			}
		}
		
		return output;
	}

	/**
	 * Thread that runs the server.
	 */
	public void run()
	{
		int actual, bytesread, len;
		int iterator = 2;

		try
		{
			ssc = (ServerSocketConnection)Connector.open("socket://:80");
			System.out.println("HTTP server started");

			socket = null;
			while (runServer)
			{
				iterator++;
				socket = (SocketConnection)ssc.acceptAndOpen();
//				System.out.println("Client accepted: " + socket.getAddress());
				
				input = socket.openDataInputStream();				
				len = input.available();
				try
				{
					while ((len = input.available()) < 1)
						sleep(1);
				}
				catch (Exception e) {}
				
				bytesread = 0;
				actual = 0;
				String str = "";
				try
				{
					byte[] data = new byte[len];
					while ((bytesread != len) && (actual != -1))
					{
						actual = input.read(data, bytesread, len - bytesread);
						str += new String(data, 0, actual);
						bytesread += actual;
					}
				}
				catch (IOException e)
				{
				}

				// text/xml
				String content = handleRequest(str);
				String response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: "+content.length()+"\r\n\r\n" + content;

				PrintStream out = new PrintStream(socket.openOutputStream());
				out.print(response);

				out.close();
				input.close();
				socket.close();
			}
		}
		catch (Exception e)
		{
			System.out.println("Server.run: " + e.toString());
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -