`

一个简单多线程server

    博客分类:
  • net
阅读更多
学习了《微博是这样炼成的》开始的一个简单多线程server,先把代码记录下来,经测试很好用。有一点点小疑问?
package net;
import java.net.*;
import java.io.*;

public class ServerThread extends Thread{
	private Socket client;//线程对象要处理的连接变量
	private OutputStream out;//输出流对象
	/**创建此线程对象时,传入一个要处理的连接对象*/
	public ServerThread(Socket socket)
	{
		this.client = socket;
	}
	
	//封装发送消息的代码
	public void sendMsg2Me(String msg) throws Exception
	{
		byte[] data = msg.getBytes();
		out.write(data);
		out.flush();
	}
	
	//调用处理连接的方法
	public void run()
	{
		try {
			processChat(client);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//客户端处理进入的连接对象
	private void processChat(Socket client) throws Exception
	{
		out = client.getOutputStream();
		InputStream in = client.getInputStream();
		String s = "你好,欢迎来到本论坛!\r\n";
		this.sendMsg2Me(s);
		String inputS = readString(in);
		while(!inputS.equals("bye"))
		{
			System.out.println("客户端说:"+inputS);
			s  = "我收到你的话了"+inputS+"\r\n";
			this.sendMsg2Me(s);
			inputS = readString(in);
		}
		s = "欢迎再来!\r\n";
		this.sendMsg2Me(s);
		System.out.println("客户端退出连接!");
		client.close();
	}
	
	/**
	 * 从流上(客户端)读到的字符串
	 */
	private String readString(InputStream ins) throws IOException
	{
		StringBuffer str = new StringBuffer();
		char c=0;
		while(c!=13)
		{
			int i = ins.read();
			c = (char)i;
			str.append(c);
		}
		return str.toString().trim();
	}
	
	//启动服务器,等待客户端进入
	public static void setUpServer(int port)
	{
		try
		{
			ServerSocket server = new ServerSocket(port);
			System.out.println("服务器创建成功!\r\n");
			while(true)
			{
				Socket client = server.accept();
				ServerThread tServerThread = new ServerThread(client);
				tServerThread.start();
				System.out.println("已经启动了一个线程去处理这个对象了!");
			}
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public static void main(String args[])
	{
		ServerThread.setUpServer(9090);
	}
}


书上setUpServer()方法不是static方法,那么我又该如何启动这个类呢?
疑问已经解决;可以再写一个类去掉用。
package net;
import java.io.IOException;
import java.net.*;
public class SetUpServer {
	public static void main (String args[]) throws IOException
	{
		ServerSocket tServer = new ServerSocket(9090);
		while(true)
		{
			Socket tCilent = tServer.accept();
			ServerThread tThread = new ServerThread(tCilent);
			tThread.start();
		}
	}
}


具体的检验方式可于dos命令行输入telnet localhost 9090
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics