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

📄 server.java

📁 自己写的很独特的web服务器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.lblabs.net;

import java.io.*;
import java.net.*;
import java.util.Hashtable;
import java.util.ArrayList;
import java.util.Enumeration;

import com.lblabs.dns.RegistryServer;
import com.lblabs.web.WebServer;
import com.lblabs.business.BookRetailer;
import com.lblabs.tools.Tools;
import com.lblabs.tools.Queue;

import com.ibm.xml.parser.TXDocument;
import com.ibm.xml.parser.Parser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Server
{
	static final int size = 60000;

	public static void main(String argv[])
	{
		Hashtable requestQueueHash = new Hashtable();
		Queue generalRequestQueue = new Queue();
		Queue generalResponseQueue = new Queue();
		String threadID;
		ArrayList threadIDList = new ArrayList();

		ConnectionStatus connectionStatus = new ConnectionStatus();

		Communicator communicator = new Communicator(requestQueueHash, generalRequestQueue, generalResponseQueue);
		communicator.start();

		RequestMessage requestMessage = new RequestMessage();
		ResponseMessage responseMessage = new ResponseMessage();

		while (true)
		{
			try
			{
				Thread.sleep(1);
			}
			catch (Exception e)
			{
				System.out.println(e);
			}

			if (!generalRequestQueue.isEmpty())
			{
				requestMessage = (RequestMessage)generalRequestQueue.dequeue();
				if (!threadIDList.contains(requestMessage.threadID) && requestMessage.methodName.equals("isConnectionAvailable"))
				{
//					requestMessage = (RequestMessage)generalRequestQueue.dequeue();
					if (connectionStatus.getRegularConnection())
					{
						threadIDList.add(requestMessage.threadID);
						Queue requestQueue = new Queue();
						requestQueueHash.put(requestMessage.threadID, requestQueue);
						BusinessServerThread businessServerThread = new BusinessServerThread(requestMessage.threadID, threadIDList, requestQueue, generalResponseQueue, connectionStatus);
						businessServerThread.start();
						responseMessage.threadID = requestMessage.threadID;
						responseMessage.returnValue = "true";
						generalResponseQueue.enqueue(responseMessage);
					}
					else
					{
						responseMessage.threadID = requestMessage.threadID;
						responseMessage.returnValue = "false";
						generalResponseQueue.enqueue(responseMessage);
					}
				}
			}
		}
	}
}

class Communicator extends Thread
{
	Hashtable requestQueueHash;
	Queue generalRequestQueue;
	Queue generalResponseQueue;
	static final int size = 60000;
	public Communicator(Hashtable requestQueueHash, Queue generalRequestQueue, Queue generalResponseQueue)
	{
		this.requestQueueHash = requestQueueHash;
		this.generalRequestQueue = generalRequestQueue;
		this.generalResponseQueue = generalResponseQueue;
	}

	public void run()
	{
		try
		{
			DatagramSocket socket = null;
			DatagramPacket packet = null;
			String request = null;
			String response = null;

			socket = new DatagramSocket(8888);
			int index;
			String threadID;
			String methodName;
			String parameterString;
			Hashtable parameterHash = new Hashtable();
			Hashtable responseHash = new Hashtable();

			while (true)
			{
				// create a datagram packet to receive message in
				byte[] reqBuffer = new byte[size];
				byte[] resBuffer = new byte[size];
				packet = new DatagramPacket(reqBuffer, size);

				// wait for message from client
System.out.println("Waiting for requests ...");
				socket.receive(packet);

				// extract information from datagram packet
				reqBuffer = packet.getData();
				int port = packet.getPort();
				int length = packet.getLength();
				InetAddress address = packet.getAddress();

				// print information to standard output
				request = new String(reqBuffer);
				if (request != null)
				{
					index = request.indexOf("|");
					threadID = request.substring(0, index);
System.out.println("threadID = " + threadID);
					request = request.substring(index + 1);
					index = request.indexOf("|");
					methodName = request.substring(0, index);
System.out.println("methodName = " + methodName);
					request = request.substring(index + 1);
					index = request.indexOf("|");
					parameterString = request.substring(0, index);
System.out.println("parameterString = " + parameterString);

					RequestMessage requestMessage = new RequestMessage();
					requestMessage.threadID = threadID;
					requestMessage.methodName = methodName;
					requestMessage.parameterString = parameterString;
					if (requestQueueHash.size() > 0)
					{
						Queue requestQueue = (Queue)requestQueueHash.get(threadID);
						if (requestQueue != null)
						{
							requestQueue.enqueue(requestMessage);
							requestQueueHash.put(threadID, requestQueue);
						}
					}
					generalRequestQueue.enqueue(requestMessage);
				}

				while (true)
				{
					try
					{
						Thread.sleep(1);						
					}
					catch (Exception e)
					{
						System.out.println(e);
					}
					if (!generalResponseQueue.isEmpty())
					{
						ResponseMessage responseMessage = new ResponseMessage();
						responseMessage = (ResponseMessage)generalResponseQueue.dequeue();

						// send the message back to the client
						if (responseMessage.returnValue == null)
						{
							responseMessage.returnValue = "null#";
						}
						else
						{
							responseMessage.returnValue += "#";
						}
						resBuffer = responseMessage.returnValue.getBytes();
						length = resBuffer.length;
						packet = new DatagramPacket(resBuffer, length, address, port);
						socket.send(packet);
						break;
					}
				}
			}
		}
		catch (SocketException e)
		{
			// Something went wrong with the socket connection
			System.out.println(e.toString());
		}
		catch (IOException e)
		{
			// Something went wrong on receive
			System.out.println(e.toString());
		}
	}
}

class BusinessServerThread extends Thread
{
	String threadID;
	ArrayList threadIDList;
	ConnectionStatus connectionStatus;
	Queue requestQueue;
	Queue generalResponseQueue;
	BookRetailer bookRetailer = new BookRetailer();
	RegistryServer registryServer = new RegistryServer();
	WebServer webServer = new WebServer();
	RequestMessage requestMessage = new RequestMessage();
	ResponseMessage responseMessage = new ResponseMessage();

	public BusinessServerThread(String threadID, ArrayList threadIDList, Queue requestQueue, Queue generalResponseQueue, ConnectionStatus connectionStatus)
	{
		this.threadID = threadID;
		this.threadIDList = threadIDList;
		this.requestQueue = requestQueue;
		this.generalResponseQueue = generalResponseQueue;
		this.connectionStatus = connectionStatus;
	}

	public void run()
	{
		int index;
		Tools tools = new Tools();
		while (true)
		{
			try
			{
				Thread.sleep(1);
			}
			catch (Exception e)
			{
				System.out.println(e);
			}
			if (!requestQueue.isEmpty())
			{
				requestMessage = (RequestMessage)requestQueue.dequeue();
				if ((requestMessage.threadID).equals(threadID))
				{
					if ((requestMessage.methodName).equals("signIn"))
					{
						responseMessage.threadID = threadID;
						responseMessage.returnValue = "true";
						generalResponseQueue.enqueue(responseMessage);
					}
					else if ((requestMessage.methodName).equals("signOut"))
					{
						responseMessage.threadID = threadID;
						responseMessage.returnValue = "true";
						threadIDList.remove(threadID);
						connectionStatus.getRegularDisconnection();
						generalResponseQueue.enqueue(responseMessage);
						break;
					}
					else if ((requestMessage.methodName).equals("getPrice"))
					{
						String bookName = requestMessage.parameterString;
						float bookPrice = bookRetailer.getPrice(bookName);
						responseMessage.threadID = threadID;
						responseMessage.returnValue = tools.convertFloatToString(bookPrice);
						generalResponseQueue.enqueue(responseMessage);
					}
					else if ((requestMessage.methodName).equals("getPublisher"))
					{
						String bookName = requestMessage.parameterString;
						String publisher = bookRetailer.getPublisher(bookName);
						responseMessage.threadID = threadID;
						responseMessage.returnValue = publisher;
						generalResponseQueue.enqueue(responseMessage);
					}
					else if ((requestMessage.methodName).equals("getAuthor"))
					{
						String bookName = requestMessage.parameterString;
						String author = bookRetailer.getAuthor(bookName);
						responseMessage.threadID = threadID;
						responseMessage.returnValue = author;
						generalResponseQueue.enqueue(responseMessage);
					}
					else if ((requestMessage.methodName).equals("buyBooks"))
					{
						Hashtable parameterHash = tools.convertStringToHash(requestMessage.parameterString);
						String inputAccountName = (String)parameterHash.get("0");
						String inputAccountPassword = (String)parameterHash.get("1");
						String inputCreditCardNumber = (String)parameterHash.get("2");
						String inputBookName = (String)parameterHash.get("3");
						int inputQuantity = tools.convertStringToInt((String)parameterHash.get("4"));
						Hashtable responseHash = bookRetailer.buyBooks(inputAccountName, inputAccountPassword, inputCreditCardNumber, inputBookName, inputQuantity);
						responseMessage.threadID = threadID;
//						responseMessage.returnValue = tools.convertHashToString(responseHash);
						responseMessage.returnValue = (this.createReceiptPage(responseHash)).toString();
						generalResponseQueue.enqueue(responseMessage);
					}

					else if ((requestMessage.methodName).equals("register"))
					{
						Hashtable parameterHash = tools.convertStringToHash(requestMessage.parameterString);
						String yourURL = (String)parameterHash.get("0");
						String yourAddress = (String)parameterHash.get("1");
						boolean isRegistrySuccessful = registryServer.registerDNS(yourURL, yourAddress);
						responseMessage.threadID = threadID;
						responseMessage.returnValue = tools.convertBooleanToString(isRegistrySuccessful);

⌨️ 快捷键说明

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