📄 server.java.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 + -