QuickSever 初次尝试

QuickServer是一个开源的Java库,简化了创建多线程、多客户端TCP服务器的过程。它允许开发者专注于应用程序逻辑,而非底层的多线程处理。通过一个简单的示例,展示了如何使用QuickServer实现一个回显服务器,客户端发送'Hello Server',服务器将其回显给客户端。
摘要由CSDN通过智能技术生成

QuickServer是一个免费的开源Java库,用于快速创建健壮的多线程、多客户端TCP服务器应用程序。使用QuickServer,用户可以只集中处理应用程序的逻辑/协议,从而方便的建立功能强大的服务器应用。该程序由Akshathkumar Shetty设计和实现。
socket编程对程序员来说都不是一件容易的事,创建多线程、多客户端的服务器socket更像一场恶梦了。在每个新的软件中处理多socket连接,我们都要浪费大把时间编写大量重复的代码。QuickServer因而诞生——使用Java创建多线程、多客户端服务器应用。使用QuickServer将减轻程序员编写服务器端多线程操作的负担。下面是QuickServer简单的服务器和客户端的实现。

  • Server 服务器端

  1. EchoCommandHandler 继承 ClientCommandHandler, ClientEventHandler, 实现服务器接收客户端的信息,并回显客户端发来的消息。
package com.easway.quickserver.echo;

import java.io.IOException;
import java.net.SocketTimeoutException;

import org.quickserver.net.server.ClientCommandHandler;
import org.quickserver.net.server.ClientEventHandler;
import org.quickserver.net.server.ClientHandler;
import org.quickserver.net.server.DataMode;
import org.quickserver.net.server.DataType;

/***
 * Echo Command Handler
 * @author chbai
 *
 */
public class EchoCommandHandler implements ClientCommandHandler,
		ClientEventHandler {

	public void closingConnection(ClientHandler handler) throws IOException {
		 handler.sendSystemMsg("Closing connection : " + handler.getSocket().getInetAddress() + "! Bye!");
	}

	public void gotConnected(ClientHandler handler)
			throws SocketTimeoutException, IOException {
		handler.setDataMode(DataMode.STRING, DataType.IN);
		handler.setDataMode(DataMode.STRING, DataType.OUT);
		handler.sendClientMsg("+++++++++++++++++++++++++++++++");
		handler.sendClientMsg("| Welcome to EchoServer v 1.0 |");
		handler.sendClientMsg("|     Send 'Quit' to exit     |");
		handler.sendClientMsg("+++++++++++++++++++++++++++++++");
	}

	public void lostConnection(ClientHandler handler) throws IOException {
		handler.sendSystemMsg("Connection lost: "+ handler.getSocket().getInetAddress()+"! Bye!");
	}

	public void handleCommand(ClientHandler handler, String command)
			throws SocketTimeoutException, IOException {
		System.out.println(" command= "+ command);
		
		if(command.equalsIgnoreCase("Quit")){
			handler.sendClientMsg("Bye");
			handler.closeConnection();
		}
		
		else{
			handler.sendClientMsg("Server Echo: "+ command);
		}
	}

}

2.       EcoServer   启动QuickServer服务器

package com.easway.quickserver.echo;

import org.quickserver.net.AppException;
import org.quickserver.net.server.QuickServer;

/**
 * Quick Sever 
 * @author chbai
 *
 */
public class EchoServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		QuickServer server = new QuickServer("com.easway.quickserver.echo.EchoCommandHandler");
		server.setPort(4123);
		server.setName("EchoServer v 1.0");
		try{
			server.startServer();
		}catch(AppException e){
			 System.err.println("Error in server : "+e);  
		}
	}

}


  • Client 客户端
package com.easway.quickserver.echo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Quick Server Client
 * 
 * @author chbai
 * 
 */
public class BussineClient {

	private static final Log log = LogFactory.getLog(BussineClient.class);
	private Socket socket;

	private BufferedReader in;
	private int threadNum;

	private PrintWriter out;

	public BufferedReader getBufferedReader() throws IOException {
		Reader inputStream = new InputStreamReader(socket.getInputStream());
		return new BufferedReader(inputStream);
	}

	public PrintWriter getPrintWriter() throws IOException {
		OutputStream outputStream = socket.getOutputStream();
		return new PrintWriter(outputStream, true);
	}

	public BussineClient(int num) {
		this.threadNum = num;
		action();
	}

	public void action() {
		try {
			socket = new Socket("localhost", 4123);
			in = getBufferedReader();
			out = getPrintWriter();
			// thread num
			out.println("Hello Server");
			String line = null;
			while ((line = in.readLine()) != null) {
				System.out.println(line);
			}
			out.close();
			in.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
}

  • Result 结果
    客户端向服务器端发送信息Hello Server, 服务器端会将信息回显给客户端。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值