快速业务通道

用Java实现多线程服务器程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
-- Java中实现线程的方式有两种,一是生成Thread类的子类,并定义该子类自己的run方法,线程的操作在方法run中实现。但我们定义的类一般是其他类的子类,而Java又不允许多重继承,因此第二种实现线程的方法是实现Runnable接口。通过覆盖Runnable接口中的run方法实现该线程的功能。本文例子采用第一种方法实现线程。

用Java实现多线程服务器程序(2)

时间:2009-10-10 天津大学管理学院

---- 二、多线程服务器程序举例

---- 以下是我们在项目中采用的多线程服务器程序的架构,可以在此基础上对命令进行扩充。本例未涉及数据库。如果在线程运行中需要根据用户指令对数据库进行更新操作,则应注意线程间的同步问题,使同一更新方法一次只能由一个线程调用。这里我们有两个类,receiveServer包含启动代码(main()),并初始化ServerSocket的实例,在accept方法返回用户请求后,将返回的套接字(Socket)交给生成的线程类serverThread的实例,直到该用户结束连接。

//类receiveServer import java.io.*; import java.util.*; import java.net.*; public class receiveServer{ final int RECEIVE_PORT=9090; //该服务器的端口号 //receiveServer的构造器 public receiveServer() { ServerSocket rServer=null; //ServerSocket的实例 Socket request=null; //用户请求的套接字 Thread receiveThread=null; try{ rServer=new ServerSocket(RECEIVE_PORT); //初始化ServerSocket System.out.println("Welcome to the server!"); System.out.println(new Date()); System.out.println("The server is ready!"); System.out.println("Port: "+RECEIVE_PORT); while(true){ //等待用户请求 request=rServer.accept(); //接收客户机连接请求 receiveThread=new serverThread(request); //生成serverThread的实例 receiveThread.start(); //启动serverThread线程 } }catch(IOException e){ System.out.println(e.getMessage());} } public static void main(String args[]){ new receiveServer(); } //end of main } //end of class //类serverThread import java.io.*; import java.net.*; class serverThread extends Thread { Socket clientRequest; //用户连接的通信套接字 BufferedReader input; //输入流 PrintWriter output; //输出流 public serverThread(Socket s) { //serverThread的构造器 this.clientRequest=s; //接收receiveServer传来的套接字 InputStreamReader reader; OutputStreamWriter writer; try{ //初始化输入、输出流 reader=new InputStreamReader (clientRequest.getInputStream()); writer=new OutputStreamWriter (clientRequest.getOutputStream()); input=new BufferedReader(reader); output=new PrintWriter(writer,true); }catch(IOException e){ System.out.println(e.getMessage());} output.println("Welcome to the server!"); //客户机连接欢迎词 output.println("Now is: "+new java.util.Date()+" "+ "Port:"+clientRequest.getLocalPort()); output.println("What can I do for you?"); } public void run(){ //线程的执行方法 String command=null; //用户指令 String str=null; boolean done=false; while(!done){ try{ str=input.readLine(); //接收客户机指令 }catch(IOException e){ System.out.println(e.getMessage());} command=str.trim().toUpperCase(); if(str==null || command.equals("QUIT")) //命令quit结束本次连接 done=true; else if(command.equals("HELP"

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号