java实现多线程的网络并发服务器.docx

上传人:b****5 文档编号:4097113 上传时间:2022-11-27 格式:DOCX 页数:16 大小:260.44KB
下载 相关 举报
java实现多线程的网络并发服务器.docx_第1页
第1页 / 共16页
java实现多线程的网络并发服务器.docx_第2页
第2页 / 共16页
java实现多线程的网络并发服务器.docx_第3页
第3页 / 共16页
java实现多线程的网络并发服务器.docx_第4页
第4页 / 共16页
java实现多线程的网络并发服务器.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

java实现多线程的网络并发服务器.docx

《java实现多线程的网络并发服务器.docx》由会员分享,可在线阅读,更多相关《java实现多线程的网络并发服务器.docx(16页珍藏版)》请在冰豆网上搜索。

java实现多线程的网络并发服务器.docx

java实现多线程的网络并发服务器

 

课程设计说明书

课程名称:

操作系统原理-课程设计

课程代码:

题目:

多线程的网络并发服务器设计

年级/专业/班:

学生姓名:

学  号:

开始时间:

2011年12月11日

完成时间:

2011年12月24日

课程设计成绩:

学习态度及平时成绩(30)

技术水平与实际能力(20)

创新(5)

说明书撰写质量(45)

总分(100)

指导教师签名:

年月日

目录

1引言1

1.1问题的提出1

1.2国内外研究的现状1

1.3任务与分析1

2程序的主要功能2

2.1客户端接收和发送消息功能2

2.2服务器分配和回收序号功能2

2.3服务器显示信息功能2

3程序运行平台3

4总体设计4

5程序类的说明5

6模块分析10

6.1客服端模块10

6.2服务器模块10

6.3处理客户端线程的模块12

6.4服务器线程模块12

7系统测试13

8结论18

参考文献19

1引言

1.1问题的提出

在现代化的生活中,网络无处不在,那么是怎样来实现客户与服务器的通信的呢,服务器是怎样来实现处理不同客户端发来的请求,这就涉及到多线程的网络并发服务器的设计。

1.2国内外研究的现状

传统的并发服务器往往是基于多进程机制的,每个客户一个进程,需要操作系统的干预,进程数目受操作系统的限制。

然而许多新型操作系统都是多线程,将并行服务器设计为多线程,可以增加其效率。

这样,不必为每个服务请求启动一个单独的进程或任务,多线程并行服务器可以启动一个执行速度更快的独立线程。

如果主机是多处理器的,则多线程并行服务器能够在多处理机上执行多个线程。

1.3任务与分析

一个进程可以创建多个线程,线程与线程间的通信方式比较容易。

本设计主要是编写一个多线程的网络通信程序,不同的线程处理不同类型的消息,比如有专门处理TCP的线程、专门处理UDP消息的线程等。

 

2程序的主要功能

2.1客户端接收和发送消息功能

客户端接与服务器建立连接,并且将从键盘输入的信息发送给服务器,客户端也能接收从服务器发来的消息并显示。

2.2服务器分配和回收序号功能

为每一个连接到服务器的客户端分配一个唯一的序号。

并在断开连接时回收序号。

2.3服务器显示信息功能

当没有客户端与服务器连接时,每隔一秒显示时间,当有客户端与服务器相连时处理客户端发来的数据,并显示。

3程序运行平台

Windows

Jdk1.6

Eclipse

具体操作如下:

打开服务器,导入现有java项目,名字为OS课程设计,在com包中找到Main类,点击右键runas,选择javaapplication。

在另一个工作空间打开客户端。

 

4总体设计

服务器端的设计:

 

回收序号

分配序号

显示时间

服务器

图4.1服务器的框架图

客户端的设计:

接收消息

发送消息

客户端

 

图4.2客户端的框架图

5程序说明

Server类的声明

publicclassServer{

publicstaticintnumber=100;

publicstaticResourcesresource=newResources();

ServerSocketserver=null;

DataInputStreamin=null;

DataOutputStreamout=null;

ServerThreadserverThread=null;

Stringmark0="**-Client1-**:

";

Stringmark1="**-Client2-**:

";

publicServer(){

try{

server=newServerSocket(4331);

serverThread=newServerThread();

serverThread.setName("serverThread");

serverThread.start();

}catch(IOExceptione1){

System.out.println(e1);

return;

}

while(true){

try{

System.out.println("服务器正在运行...");

Socketyou=null;

you=server.accept();//堵塞状态,除非有客户呼叫

if(you!

=null&&number>0){

System.out.println("接到客户端的请求!

");

DataInputStreamin=newDataInputStream(you.getInputStream());

DataOutputStreamout=newDataOutputStream(you.getOutputStream());

Stringmark="";

charc;

while((c=in.readChar())!

='\n'){

mark=mark+c;

}

out.writeChars("序号:

"+number+"\n");

if(mark.equals(mark0)){

Thread1subThread=newThread1(you);

ThreaddealWithClient1=newThread(subThread);

dealWithClient1.start();

number--;

}elseif(mark.equals(mark1)){

Thread2subThread1=newThread2(you);

ThreaddealWithClient2=newThread(subThread1);

dealWithClient2.start();

number--;

}else{

System.out.println("连接失败!

");

}

}

Thread.sleep(1000);

}catch(Exceptione){

System.out.println("客户已断开");

break;

}

}

}

}

Thread1类的声明

publicclassThread1implementsRunnable{

Socketsocket=null;

DataOutputStreamout=null;

DataInputStreamin=null;

Stringstr=null;

Stringstr2=null;

Scannerreader=newScanner(System.in);

chars;

inti=0;

intf=1;

intnumber=-1;

Thread1(Sockett){

socket=t;

number=Server.number;

}

publicvoidrun(){

while(f==1){

try{

str="";

out=newDataOutputStream(socket.getOutputStream());

in=newDataInputStream(socket.getInputStream());

while((s=in.readChar())!

='\n'){

str=str+s;

}

System.out.print("序号:

"+number);

System.out.println("内容:

"+str);

str2="您好!

您的序号为:

"+number+'\n';

out.writeChars(str2);

try{

Thread.sleep(1000);

}catch(Exceptione){

break;

}

if(str.equals("end")){

try{

socket.close();

}catch(Exceptionex){

break;

}

}

}catch(IOExceptionex){

f=0;

Server.number++;

number=-1;

Server.resource.give();

}

}

System.out.println(Thread.currentThread().getName()+"终止!

");

}

}

ServerThread类的声明

publicclassServerThreadextendsThread{

intflag=1;

publicvoidrun(){

while(true){

Datedate=newDate();

Server.resource.give();

System.out.println("\n--------------------------------------------------------");

System.out.println("现在的时间是:

"+date+"序号:

"+Server.number);

System.out.println("服务器工作正常,没有客服端发来请求");

System.out.println("--------------------------------------------------------\n");

try{

Thread.sleep(1000);

}catch(InterruptedExceptione){

}

}

}

}

Client1类的声明

publicclassClient1{

publicstaticvoidmain(Stringargs[]){

SocketmySocket=null;

DataInputStreamin=null;

DataOutputStreamout=null;

intd=0;

Strings=null;;

Strings2=null;

charc;

Scannerreader=newScanner(System.in);

try{

mySocket=newSocket("127.0.0.1",4331);

in=newDataInputStream(mySocket.getInputStream());

out=newDataOutputStream(mySocket.getOutputStream());

out.writeChars("**-Client1-**:

\n");

s2="";

while((c=in.readChar())!

='\n'){

s2=s2+c;

}

System.out.println(s2);

while(true){

s="";

System.out.println();

s=s+reader.nextLine();

s=s+'\0';

out.writeChars(s);

s2="";

while((c=in.readChar())!

='\n'){

s2=s2+c;

}

System.out.println(s2);

}

}catch(Exceptionex){

System.out.println("连接已经断开!

");

}

}

}

 

6模块分析

6.1客户端模块

客户端先发送一个标志符,服务器分配一个序号给客户端,然后进行通信。

当客户端发送end的时候断开连接。

流程图如下:

发送消息

接收消息输出

发送客户标志

接收序号输出

结束

断开连接

连接到服务器

输入

开始

异常

异常

 

异常

 

图6.1.1客户端流程图

 

6.2服务器模块

接受客户端发来的请求,并根据不同的标志创建不同的线程进行处理。

输出”客户

端已断开”

休息1秒

结束

连接失败

回收序号

创建相应线程处理

接收客户端标志

可识别的标志

分配序号

Number>0

接收客户端

输出“服务器正常运行…”

建立服务器、创建服务器线程并启动

开始

流程图:

 

输出异常

 

图6.2.1服务器流程图

6.3处理客户端的线程模块

处理客户端发来的请求。

有两个线程第一个线程接受客户端的消息输出,并向客户端发送“hello,yourserialnumberis(分配到的序号)”,另一个线程发送“您好,您的序号为:

(分配到的序号)”。

6.4服务器线程模块

当没有客户端请求时,每隔一秒钟显示时间,但有客户端时阻塞,一直到没有客户端的请求时又显示。

 

7系统测试

首先进入eclipse,导入现有项目运行。

图7.1没有连接客户端时服务器

图7.2Client1连接到服务器

图7.3连接Client1后服务器显示

图7.4Client2连接到服务器

图7.5Client2连接后的服务器显示

图7.6断开Client1后的服务器显示

图7.7断开Client2后的服务器的显示

8结论

 

9.参考文献

[1]张尧学等,计算机操作系统教程第二版,北京清华大学出版社,2000.8

[2]汤子瀛等,计算机操作系统原理第四版,西安西安电子科技大学出版社,1996.12

[3]怀石工作室,LINUX上的C编程,中国电力出版社,2001.5

[4]HerbertSchildt,C语言大全,电子工业出版社,1995.2

[5]许合利等编著,C语言程序设计,中国矿业大学出版社,2007

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1