*设为首页
*加入收藏
网站导航
>>
首页
┊
业界新闻
┊
语言基础
┊
环境配置
┊
数据库应用
┊
J2EE
┊
J2ME
┊
JAVA代码
┊
认证考试
┊
实用技巧
热门关键字:
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 转载请注明出处