标签:
最近实现了团队项目局域网聊天室的服务器端的框架,目前可以接收socket请求并收发消息。
由于聊天室服务器需要同时维持多个socket通信,所以服务器端代码采用了多线程技术,即每接收到一个socket请求后将创建一个新的线程进行后续操作,而主线程一直在等待请求并分发任务。实现了同时服务多个socket的功能。
代码如下:
主线程代码:
1 public class Server { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 try { 6 ServerSocket svr = new ServerSocket(5555); 7 while (true) { 8 Socket s = svr.accept(); 9 ServerThread ST = new ServerThread(s); 10 ST.start(); 11 ChatManager.getChatManager().add(ST); 12 } 13 } catch (IOException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 18 } 19 20 }
线程类:
public class ServerThread extends Thread { private Socket soc=null; public BufferedReader in=null; public BufferedWriter out=null; public ServerThread(Socket soc) { // TODO Auto-generated constructor stub this.soc = soc; } public void out(String msg){ try { out.write(msg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { InputStream is=null; OutputStream os=null; try { is=soc.getInputStream(); os=soc.getOutputStream(); in=new BufferedReader(new InputStreamReader(is)); out=new BufferedWriter(new OutputStreamWriter(os)); System.out.println(soc.getPort()); ChatManager.getChatManager().threadsVector.add(this); out.write("欢迎"); out.flush(); while (true) { String str = in.readLine(); ChatManager.getChatManager().pulish(this, str); System.out.println(str); //System.out.println(ChatManager.getChatManager().threadsVector.size()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } super.run(); } }
多线程服务器初步框架完成,目前测试可以同时服务、维持多个socket通信。具体功能会在之后的开发中完善。
标签:
原文地址:http://www.cnblogs.com/bjut13070017/p/5602220.html