*设为首页
*加入收藏
热门关键字: JAVA
>>当前位置:Java大本营>Java线程>文章内容
用Java实现多线程服务器程序
作者: 发布时间:2008-05-21 10:29:54
//类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")){
//命令help查询本服务器可接受的命令
output.println("query");
output.println(
"quit");
output.println(
"help");
}

else if(command.startsWith("QUERY"))
//命令query
output.println("OK to query something!");
}

//else if …….. //在此可加入服务器的其他指令
else if(!command.startsWith("HELP"&&!command.startsWith("QUIT"&&!command.startsWith("QUERY")){
output.println(
"Command not Found!
Please refer to the HELP!");
}

}
//end of while
try{
clientRequest.close(); 
//关闭套接字
}
catch(IOException e){
System.out.println(e.getMessage());
}

command
=null;
}
//end of run 

启动该服务器程序后,可用telnet machine port命令连接,其中machine为本机名或地址,port为程序中指定的端口。也可以编写特定的客户机软件通过TCP的Socket套接字建立连接。

·java 读文件换行的问题(05-21)
·Eclipse中如何debug程序?(05-21)
·Java 内部类(inner class)(05-21)
·java线程(05-21)
·没学线程时写的java打字效果 (02-27)
·线程的属性 (02-18)
·多线程简介 (02-17)
·获取java线程中信息的两种方法 (02-17)
·OSGi的Class Loading架构 (01-21)
·常见的几个开源软件许可 (01-21)
·谈谈servlet线程安全 (01-21)
·进程和线程(01-13)
复制地址发给您的好友: [推荐文章] [返回顶部] [关闭窗口]
版权所有 Java大本营 1999-2007 转载请注明出处