vc++网络聊天室的实现计算机操作系统课程设计说明书(含MFC源程序)

vc++网络聊天室的实现计算机操作系统课程设计说明书(含MFC源程序)
vc++网络聊天室的实现计算机操作系统课程设计说明书(含MFC源程序)

实验报告|

|

实验名称网络聊天室的实现

课程名称计算机操作系统

|

|

目录

【1】设计原理———————————————————————4 【2】程序流程图——————————————————————9 【3】设计步骤———————————————————————10 【4】使用方法说明—————————————————————21 【5】实验结果及分析————————————————————24

设计原理

计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。

此程序主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。在服务器端的成员列表栏中会显示在线的所有人名单,有人退出聊天室,成员列表会自动除名。服务器端同时也提供了成员之间的私聊功能,此时服务器端作为一个转发站,进行消息的转发。整个程序的主体使用了CSocket 类的方法,实现了网络通讯聊天。

整个程序设计为两个部分:服务器(ChatServer)和客户端(Chat)

多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。下面描述了多人聊天的实现原理:

当客户端Client N向对应的服务端口N发送了消息Message,服务端口N将Message 复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE 消息,使每个服务端口将Message发送给对应的客户端。这样,所有客户端就都获得了Message消息,实现了多人聊天功能。

BOOL CClientSocketList::Sends(char *buff,int n)

{CClientSocket *curr=Head;

while (curr)

{curr->Send(buff,n);

curr=curr->Next;}

return true;}

USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。

以下程序是私聊功能的实现:

BOOL CClientSocketList::OnlySend(char *buff,int n,int who) {

CClientSocket *curr=Head;

while (curr && who>0)

{curr=curr->Next;

who--;}

curr->Send(buff,n);

return true;}

以下是此程序的效果截图:

服务器端的效果截图

用户“yq”的登录界面

用户“zxl”的登录界面

功能描述

1、多人会话。此程序分为服务器端和客户端,当客户端要进入聊天室的时候,就

必须通过网络连接到服务端,以实现和其它客户端的通讯功能。其中最简单的

一种通讯方式就是多人会话,运用多线程同时对多个用户的信息进行监听,服

务器通过转发消息,让所有人都可以得到消息,实现多人会话。

2、一对一会话。此程序的服务器端除了能够提供多人会话的功能外,还提供了私

人聊天功能,可以实现一对一的聊天。就是在消息转发的时候,私聊的消息只

发给私聊的对象,而其他人看不到此消息,但是此消息会通过服务器端转发,

然后再到达目的客户端。

3、个性化的昵称。为了区别用户,此程序还允许用户可以自定义个性化的昵称。

在用户登录的时候,用户可以为自己设定一个昵称,以便在多人会话的时候作

为身份识别。同时服务器端也会以此昵称作为客户端的登录身份,服务器管理

员,同样也显示在其他用户的在线列表栏中。

4、服务器登陆。服务器端开启之后处于监听状态,多线程工作,接受每一个用户

的连接请求。而客户端只需输入服务器端的IP地址即可,端口在服务器端自动

生成。

操作系统关键字:

进程间通信;

同步互斥;

多线程操作

设计步骤:

本聊天程序实现工具为Visual C++ 6.0 MFC,主要利用其中用于网络编程的CSocket类实现网络通讯功能。主要程序分为两部分:

1、服务器端,界面如下图所示:

主要代码如下所示:

(1)、CChatRoomServerDlg函数用来对服务器端进行初始化

void CChatServerDlg::OnPaint()

{if (IsIconic())

{CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

dc.DrawIcon(x, y, m_hIcon);}

else

{CDialog::OnPaint();}

}

HCURSOR CChatServerDlg::OnQueryDragIcon()

{return (HCURSOR) m_hIcon;}

//开始服务器按钮

void CChatServerDlg::OnButtonStart()

{m_IDC_BUTTON_START.EnableWindow(FALSE);//让开启按钮失效if (!ListenSocket.Create(6400))//绑定端口

{AfxMessageBox("绑定端口失败!");}

if (!ListenSocket.Listen())//服务器侦听

{AfxMessageBox("侦听失败!");}

AfxMessageBox("服务器开启成功!");

CString tTmep;

tTmep="系统消息:服务器已开启成功!";

m_ChatList.AddString(tTmep);

m_IDC_BUTTON_STOP.EnableWindow(TRUE);//恢复停止按钮} void CChatServerDlg::OnButtonStop()

{m_IDC_BUTTON_STOP.EnableWindow(FALSE);

char s[30]="聊天服务器停止工作了!!";

https://www.360docs.net/doc/b617740594.html,SL.Sends(s,30);//广播聊天服务器停止消息

CClientSocket *p=https://www.360docs.net/doc/b617740594.html,SL.Head;

while (p)

{p->Close();

https://www.360docs.net/doc/b617740594.html,SL.Del(p);//释放链表中的套接字

p=https://www.360docs.net/doc/b617740594.html,SL.Head;}

ListenSocket.Close();

m_USER.ResetContent();//清楚服务器在线用户列表

m_IDC_BUTTON_START.EnableWindow(TRUE);}

void CChaServerDlg::OnButtonSend()

{ int n;

char message[1000];

UpdateData(TRUE);

if (m_IDC_BUTTON_MESSAGE=="")

{MessageBox("请输入消息!!","提示",MB_OK);}

else

{m_IDC_BUTTON_MESSAGE="服务器端说:"+m_IDC_BUTTON_MESSAGE;

n=m_IDC_BUTTON_MESSAGE.GetLength();

sprintf(message,"%s",m_IDC_BUTTON_MESSAGE.GetBuffer(n));

message[n]=0;

https://www.360docs.net/doc/b617740594.html,SL.Sends(message,1000);}

m_IDC_BUTTON_MESSAGE="";

UpdateData(FALSE);}

(2)、CClientSocket函数用于管理用户列表及会话

void CClientSocket::OnReceive(int nErrorCode)

{char buff[1000];

char all_user[2000];

char name[20];

int n;

int m;

n=this->Receive(buff,1000);

buff[n]=0;

char Flag[10];

for (int i=0;i<8;i++)

{Flag[i]=buff[i];}

Flag[8]=0;

CChatRoomServerApp *pApp=(CChatRoomServerApp*)AfxGetApp();

CChatRoomServerDlg *pDlg=(CChatRoomServerDlg*)pApp->m_pMainWnd; if (strcmp(Flag,"NEW_USER")==0)

{CString sTemp;

for (i=9;buff[i]!=0;i++)

{buff[i-9]=buff[i];}

buff[i-9]=0;

sTemp.Format("%s",buff);

pDlg->m_USER.AddString(sTemp);

m=pDlg->m_USER.GetCount();

strcpy(all_user,"USERLIST");

for (i=0;i

{pDlg->m_USER.GetText(i,name);

strcat(all_user,name);

strcat(all_user,"|");}

strcat(buff,"进入聊天室");

List->Sends(all_user,strlen(all_user));}

else

{if (strcmp(Flag,"CLOSEUSE")==0)

{CString sTemp;

for (i=9;buff[i]!=0;i++)

{buff[i-9]=buff[i];}

buff[i-9]=0;

sTemp.Format("%s",buff);//离线用户昵称

m=pDlg->m_USER.GetCount();

for (i=0;i

{pDlg->m_USER.GetText(i,name);

if (strcmp(name,buff)==0)

{pDlg->m_USER.DeleteString(i);

}

//将新的在线用户昵称名单发给所有用户

m=pDlg->m_USER.GetCount();

strcpy(all_user,"USERLIST");

for (i=0;i

{pDlg->m_USER.GetText(i,name);

strcat(all_user,name);

strcat(all_user,"|");

strcat(buff,"离开聊天室!");

List->Sends(all_user,strlen(all_user));

List->Del(this);}

else if (strcmp(Flag,"PrivChat")==0)//私聊

{CString sTemp;

for (i=9;buff[i]!='|';i++)

{buff[i-9]=buff[i];}

buff[i-9]=0;

sTemp.Format("%s",buff);

for (int k=i+1;buff[k]!=0;k++)

{buff[k-i-1]=buff[k];}

buff[k-i-1]=0;

m=pDlg->m_USER.GetCount();

for (i=0;i

{pDlg->m_USER.GetText(i,name);

if (strcmp(name,sTemp)==0)

{List->OnlySend(buff,strlen(buff),i);}

}}

else

{List->Sends(buff,n);//将聊天信息群发给所有用户} }

CString sTemp;

sTemp.Format("收到:%s",buff);

pDlg->m_ChatList.AddString(sTemp);

pDlg->m_ChatList.SetTopIndex(pDlg->m_ChatList.GetCount()-1);

CSocket::OnReceive(nErrorCode);}

(3)、一下代码用于设定用户的多人会话与一对一会话

BOOL CClientSocketList::Add(CClientSocket *add)

{CClientSocket *tmp=Head;

if (!Head)

{Head=add;

return false;}

while (tmp->Next)

{tmp=tmp->Next;}

tmp->Next=add;

return true;}

//从链表队列中删除Socket

BOOL CClientSocketList::Del(CClientSocket *d)

{CClientSocket *p1=Head;

CClientSocket *p2;

if (!Head)

{return false;}

if (Head==d)

{Head=p1->Next;

p1->Close();

delete p1;

return true;}

for (;p1->Next!=NULL;p1=p1->Next)

{if (p1->Next==d)

{p2=p1->Next;

p1->Next=p2->Next;

p2->Close();

delete p2;

return true;}}

return false;}

//向所有用户发送消息

BOOL CClientSocketList::Sends(char *buff,int n)

{CClientSocket *curr=Head;

while (curr)

{curr->Send(buff,n);

curr=curr->Next;}

return true;}

//仅仅向私聊用户who发送信息

BOOL CClientSocketList::OnlySend(char *buff,int n,int who) {CClientSocket *curr=Head;

while (curr && who>0)

{curr=curr->Next;

who--;}

curr->Send(buff,n);

return true;}

1、客户端,截图如下所示:

主要代码:

void CChatDlg::OnConnectButton() //连接聊天室服务器

{// TODO: Add your control notification handler code here UpdateData(TRUE);

char *nikename;

char *address;

int n;

if (!myServerSocket->Create())

{myServerSocket->Close();

AfxMessageBox("网络创建错误!!");

return;}

n=m_IDC_EDIT_ADDRESS.GetLength();

address=new char(n+1);

sprintf(address,"%s",m_IDC_EDIT_ADDRESS.GetBuffer(n));

address[n]=0;

n=m_IDC_EDIT_NIKENAME.GetLength();

nikename=new char(n+1);

sprintf(nikename,"%s",m_IDC_EDIT_NIKENAME.GetBuffer(n));

nikename[n]=0;

if (!myServerSocket->Connect(address,6767))

{myServerSocket->Close();

AfxMessageBox("网络连接错误,请检查服务器地址。");

return; }

m_BNSend.EnableWindow(TRUE);

m_BNExit.EnableWindow(TRUE);

myServerSocket->NikeName=nikename;

//发送新用户昵称

char message2[20];

strcpy(message2,"NEW_USER|");

strcat(message2,myServerSocket->NikeName);

if (myServerSocket->Send(message2,20))//——————————连接聊天室服务器{AfxMessageBox("连接成功!!");}

else

{AfxMessageBox("网络传输错误!!!");}}

void CChatRoomDlg::OnSendButton()

{// TODO: Add your control notification handler code here

int n;

char message[1000];

CString to_name;

UpdateData(TRUE);

if (m_IDC_EDIT_MESSAGE=="")

{MessageBox("请输入要发送的消息!","提示",MB_OK);}

else

{if (m_SL==TRUE)//私聊

{if (m_USER.GetCurSel()>=0)

{m_USER.GetText(m_USER.GetCurSel(),to_name);

m_IDC_EDIT_MESSAGE=myServerSocket->NikeName+m_IDC_EDIT_MESSAGE;

m_ChatList.AddString(m_IDC_EDIT_MESSAGE);

m_IDC_EDIT_MESSAGE="PrivChat|"+to_name+"|"+m_IDC_EDIT_MESSAGE;

n=m_IDC_EDIT_MESSAGE.GetLength();

sprintf(message,"%s",m_IDC_EDIT_MESSAGE.GetBuffer(n));

message[n]=0;}

else

{AfxMessageBox("没有私聊对象!");

return;}}

else

{m_IDC_EDIT_MESSAGE=myServerSocket->NikeName+m_IDC_EDIT_MESSAGE;

n=m_IDC_EDIT_MESSAGE.GetLength();

sprintf(message,"%s",m_IDC_EDIT_MESSAGE.GetBuffer(n));

message[n]=0;}

if (myServerSocket->Send(message,n+1))

{m_IDC_EDIT_MESSAGE="";

UpdateData(FALSE);}

else

{AfxMessageBox("网络传输错误!");}}}

void CChatRoomDlg::OnExitButton()

{// TODO: Add your control notification handler code here

char message2[20];

strcpy(message2,"CLOSEUSE|");

strcat(message2,myServerSocket->NikeName);

if (myServerSocket->Send(message2,20))//————————离开聊天室{}

else

{AfxMessageBox("网络传输错误!");}

CDialog::OnOK();}

BOOL CChatRoomDlg::GetMessage()//显示聊天信息

{char buff[2000];

char name[20];

int count;

count=myServerSocket->Receive(buff,2000);

buff[count]=0;

char Flag[10];

for (int i=0;i<8;i++)

{Flag[i]=buff[i];}

Flag[8]=0;

if (strcmp(Flag,"USERLIST")==0)//新用户昵称列表

{m_USER.ResetContent();//清空列表

CString sTemp;

int j=8;

for (i=8;buff[i]!=0;i++)

{if (buff[i]=='|')//昵称分隔符号

{for (int m=0;j

{name[m]=buff[j];}

name[m]='\0';

sTemp.Format("%s",name);//昵称

m_USER.AddString(sTemp);

j=i+1;}} }

else//聊天信息

{ m_ChatList.AddString(buff);}

return true;}

设计使用说明:

此聊天程序的实现主要通过两部分实现,一个是客户端,一个是服务器端。服务器端可开启服务,等待用户登录,实现消息的中转发送;客户端可以通过服务器端的IP地址登陆到聊天室,从而接入聊天网络,实现局域互通。接下来就介绍一下此程序的使用过程:首先,服务器端应该开启监听服务,等待客户端的连接请求,并实时的给予响应。

此时服务器端口处于监听状态,可以接受来自任何一个客户端的连接请求。于是开启客户端进行连接。在客户端口里面,可选项有:用户昵称,服务器IP地址,在线用户列表,用户私聊选项,消息发送窗口,消息接收窗口。用户可输入服务器端的IP地址进行连接请求,加入聊天室。同时也可以为自己创建一个个性化的昵称,作为身份标识。

若在在聊天途中服务器出现异常或者断开,在用户端有如下的提示:

操作系统课程设计

课程设计报告 2015~2016学年第一学期 操作系统综合实践课程设计 实习类别课程设计 学生姓名李旋 专业软件工程 学号130521105 指导教师崔广才、祝勇 学院计算机科学技术学院 二〇一六年一月

- 1 -

- 2 -

一、概述 一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX 的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下: 本次课程设计是要实现一个简单的模拟Linux文件系统。我们在内存中开辟一个虚拟磁盘空间(20MB)作为文件存储器,并将该虚拟文件系统保存到磁盘上(以一个文件的形式),以便下次可以再将它恢复到内存的虚拟磁盘空间中。文件存储空间的管理可采用位示图方法。 二、设计的基本概念和原理 2.1 设计任务 多用户、多级目录结构文件系统的设计与实现。可以实现下列几条命令login 用户登录 logout 退出当前用户 dir 列文件目录 creat 创建文件 delete 删除文件 open 打开文件 close 关闭文件 - 3 -

read 读文件 write 写文件 mkdir 创建目录 ch 改变文件目录 rd 删除目录树 format 格式化文件系统 Exit 退出文件系统 2.2设计要求 1) 多用户:usr1,usr2,usr3,……,usr8 (1-8个用户) 2) 多级目录:可有多级子目录; 3) 具有login (用户登录)4) 系统初始化(建文件卷、提供登录模块) 5) 文件的创建:create (用命令行来实现)6) 文件的打开:open 7) 文件的读:read8) 文件的写:write 9) 文件关闭:close10) 删除文件:delete 11) 创建目录(建立子目录):mkdir12) 改变当前目录:cd 13) 列出文件目录:dir14) 退出:logout 新增加的功能: 15) 删除目录树:rd 16) 格式化文件系统:format 2.3算法的总体思想 - 4 -

操作系统课程设计题目

课程设计任务书 一、课程设计目的 《计算机操作系统》课程设计是计算机类专业的集中实践性环节之一,是学习完《计算机操作系统》课程后进行的一次全面的综合练习。其目的在于加深对操作系统课程的理解,使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,理解操作系统在计算机系统中的作用、地位和特点,具有分析实际操作系统,设计、构造和开发现代操作系统的基本能力,为今后从事的各种实际工作,如设计、分析和改进各种系统软件和应用软件提供必要的软件理论基础。 二、课程设计内容及要求 课程设计要求: 每位同学从下述设计任务中任选一个任务完成,上机验收运行结果,现场提问,并提交所完成该任务的课程设计报告。 实验要求: 1)上机前认真使用C语言编写好程序,采用Visual C++6.0作为编译环境; 2)上机时独立调试程序 3)上机验收运行结果,现场提问 4)根据具体任务要求,提交课程设计实验报告,报告内容包括:课程设计目的、内容、基本原理、模块划分、数据结构、算法设计、程序流程图(包括主程序流程图、模块详细设计流程图等)、以及算法源码(必须有相关注释,以有助于说明问题为宜,不得全盘打印而不加任何注释)、心得体会等。

设计内容一页式虚拟存储管理页面置换算法 1.目的和要求 在熟练掌握计算机虚拟存储技术的原理的基础上,利用一种程序设计语言模拟实现几种置换算法,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础 2.实验内容 阅读教材《计算机操作系统》,掌握存储器管理相关概念和原理。 模拟实现页式虚拟存储管理的三种页面置换算法(OPT、FIFO和LRU),并通过比较性能得出结论。 前提: (1)页面分配采用固定分配局部置换。 (2)作业的页面走向和分得的物理块数预先指定。可以从键盘输入也可以从文件读入。 (3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。 3.实验环境 Windows操作系统、VC++6.0、C语言 4.实验提示 (1)基础知识 存储管理是操作系统进行资源管理的一个重要功能。现代操作系统广泛采用虚

《网络操作系统》课程标准

河南质量工程职业学院 《网络操作系统》课程标准 课程名称、代码:《网络操作系统》0411018 总学时数: 60 (理论课学时数:30 实践课学时数:30) 适用专业:计算机网络技术 一、课程名称:网络操作系统 二、内容简介: 网络操作系统课程在计算机网络专业课程体系中被分成网络操作系统入门和网络操作系统高级应用2门课程,它是构建、管理和维护计算机网络的核心,是计算机网络系统运行、控制与管理的核心,在“建网、管网、用网”等职业岗位领域具有不可缺少的地位,它负责分配、协调和安全管理各种网络资源以及应用服务等任务,培养具备运行、管理和维护基于Windows的网络系统的技能人才,符合职业岗位的需求特点。同时是计算机网络技术专业的一门职业技能课,具有很强的实用性和可操作性。该课程是计算机网络技术专业网络工程方向的专业课程,主要包含WINDOWS SERVER 2003在网络服务器管理的最常用技术,也是网络管理员执业资格考试的重要内容,在整个课程体系中具有重要的作用。 三、课程性质: 由于该课程是一门非常实用的计算机网络应用技术,是网络管理的基础平台,有网络运行环境,就有网络操作系统(Windows系统服务)在负责网络资源的管理,因此,从职业岗位群分析,开设该课程符合广阔的网络市场对人才的需求特点,任何具备信息化建设和运行条件的企事业单位都需要具备网络操作系统技能的网络运行管理人员。因此,将该课程定位为计算机网络技术专业基础课程 ......。 通过该课程的学习,提高学生的综合素质,增强学生实际操作能力,使学生获得网络管理的能力,能胜任网络管理员的职责。 四、建议课时: 共计64 理论课时 32 实践课时32 五、前导课程:计算机应用基础、计算机网络基础 计算机应用基础主要是使学生对计算机的基本知识有了初步的了解,计算机网络基础主要是使学生掌握网络的概念、网络通信模式、网络的设备、以及网络的连接方式等相关知识,在此基础上引入网络操作系统课程。

《操作系统课程设计》题目要求

操作系统课程设计要求 一.设计目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用 二.设计内容 1. 在Linux环境下模拟实现简单命令解释器。 (1)要求实现的基本命令包括: pwd //显示当前所在目录的路径名 dir <目录名> //列出指定目录名中的所有目录及文件 cd <目录名或路径>//改变当前工作目录 newdir <目录名> //新建目录 deldir <目录名> //删除目录 exit //退出命令解释程序 (2)可选做的扩展命令包括: rename <旧文件名> <新文件名> //重命名一个文件或目录 find <目录> -name <待查找的文件名> //在指定的目录及其子目录中查找指定的文件date //显示当前日期 (3)提示:整个程序的大致框架可参考如下: while ( exit未被输入) { 接收键盘的一行输入 分析输入的命令 对输入的命令进行处理,调用系统函数实现功能 } 2. 设计要求 (1) 设计必须在Linux环境下进行。 (2) 命令解释程序的提示符为:姓名拼音@ (3) 程序编写中不得使用system()系统调用。 (4) 整个程序必须严格经过测试,完成所有基本功能。源程序应有较详尽的注释。 3.可能用到的系统调用: open(),close(),read(),write(),creat() chdir(), opendir(),readdir(),rewinddir(),closedir(),rmdir(),mkdir() getcwd(), ftw() time(), localtime(), asctime()

JAVA聊天室课程设计报告(含源代码压缩文件)

南京晓庄学院 《JAVA程序设计》 课程设计报告 Java聊天室的设计与实现题 目 姓名:戴佳伟 学号:14552019 班级:14软件工程3班 指导教 王峥 师: 完成时间2016.10.7 成绩: 信息工程学院 2016年6月

目录 1引言.............................. . (3) 1.1 java 聊天室开发背景.................................... (3) 1.1java 聊天室开发的目的和意义........ (3) 1.2完成的主要工作.................... (4) 2 需求分析和总体设计................ (5) 2.1 需求分析与设计思路................ (5) 2.1.1 关键技术说明 .................................... . (5) 2.1.2 需求分析..................... ....................... 6 2.1.3 java 聊天室设计方案与思路 (6) 2.1.4 java 聊天室目录结构说明....... (7) 2.2 java 聊天室功能结构 .................................... (8) 3 详细设计.......................... (10) 3.1 java 聊天室模块实现 .................................... (10) 3.1.1 XX 模块实现.................. ..................... 10 4 java 聊天室运行结果.................................... (13) 5课程设计总结...................... .. (15)

完整版华南理工大学操作系统含课程设计随堂练习

第1章操作系统引论 本次练习有13题,你已做13题,已提交13题,其中答对13题。 当前页有10题,你已做10题,已提交10题,其中答对10题。 1. 实时操作系统必须在()内处理完来自外部的事件。 A. 响应时间 B.周转时间 C.被控对象规定时 间 D.调度时间 答题:OE A.—B. EE C.国D.(已提交) 参考答案:C 问题解析: 2. 操作系统是对()进行管理的软件。 A.软件 B.硬件 C.计算机资 源 D.应用程序 答题: A. B. * C. D.(已提交) 参考答案:C 问题解析: 3. 配置了操作系统的计算机是一台比原来的物理计算机功能更强的计算机 , 这样的一台计算机只是一台逻辑上的计算机,称为()计算机。 A.并行 B.真实 C.虚 拟 D.共享 答题:匡A. H B.(HL C.WO D.(已提交) 参考答案:C 问题解析: 4. 操作系统中采用多道程序设计技术提高了CPU和外部设备的( ) A.利用率 B.可靠性 C.稳定 性 D.兼容性 答题:* A.圏 B. C. D.(已提交) 参考答案:A 问题解析:

第1章操作系统引论 5. 在操作系统中,并发性是指若干事件—发生() A.在同一时刻 B.在不同时 刻 C.在某一时间间隔内 D.依次在不同时间间隔内

答题:PT A.占B. PT C. U~|D.(已提交) 参考答案:C 问题解析: 6. ()操作系统允许在一台主机上同时联接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A. 网络操作系统 B.批处理操作系统 C.实时操作系统 D.分时操作系统 答题: A. B. C. * D.(已提交) 参考答案:D 问题解析: 7. 下面关于操作系统的叙述中正确的是() A. 批处理作业必须提交作业控制信息 B. 分时系统不一定都具有人机交互功能 C. 从响应时间的角度看,实时系统与分时系统差不多 D. 由于采用了分时技术,用户可以独占计算机的资源 答题:* A. B. C. D.(已提交) 参考答案:A 问题解析: 8. 当前三大操作系统类型是批处理系统、分时系统和实时系统() 答题:,对. 错.(已提交) 参考答案:“ 问题解析: 9. 操作系统是计算机软件和硬件资源的管理者() 答题:对. 错.(已提交) 参考答案:“ 问题解析: 10. 操作系统对外提供的接口方式有两种:命令接口和图形窗口接口 () 答题:厂对.袒错.(已提交) 参考答案:x 问题解析: 11. 批处理系统具有交互性的优点()

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

操作系统-课程设计

课程设计说明书(操作系统) 题目:进程调度 院系:计算机科学与工程学院 专业班级:信息安全13-2 学号:20133029xx 学生姓名:xx 指导教师:xx 2015年12月15日

安徽理工大学课程设计(论文)任务书计算机科学与工程学院

安徽理工大学课程设计(论文)成绩评定表

摘要 现代计算机系统中,进程是资源分配和独立运行的基本单位,是操作系统的核心概念。因而,进程就成为理解操作系统如何实现系统管理的最基本,也是最重要的概念。进程调度是进程管理过程的主要组成部分,是必然要发生的事件。 在现代操作系统中,进程的并发机制在绝大多数时候,会产生不断变化的进程就绪队列和阻塞队列。处于执行态的进程无论是正常或非正常终止、或转换为阻塞状态,都会引发从就绪队列中,由进程调度选择一个进程进占CPU。 进程调度的核心是进程调度的算法.在本课程设计中,用良好清晰的界面向用户展示了进程调度中的时间片轮转调度算法。在最终实现的成果中,用户可指定需要模拟的进程数,CPU时间片和进程的最大执行时间,并且选择需要演示的算法,界面将会动态的显示进程调度过程及各个队列的变化。通过此进程调度模拟系统,用户可以对时间片轮转调度算法有进一步以及直观的了解。 关键词:进程,调度,PCB,时间片轮转

目录 1.设计目的 (6) 2.设计思路 (6) 3.设计过程 (8) 3.1流程图 (8) 3.2算法 (8) 3.3数据结构 (10) 3.4源代码 (10) 4.实验结果及分析 (20) 4.1 使用说明 (20) 4.2程序演示 (20) 5.实验总结 (24) 6.参考文献 (24)

java课程设计报告(java聊天室)

Java聊天室课程设计 一、需求分析 1.1开发背景 在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。 1.2设计要求 本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。 1.3设计目的 通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。能将相关的只是运用到相关的实践中去。 1.4功能实现 聊天室共分为客户端和服务端两部分,服务器程序主要负责侦听客户端发来的消息,客户端需要登录到相应的服务器才可以实现正常的聊天功能。 服务器的主要功能有 1)在特定端口上进行侦听,等待客户连接 2)用户可以配置服务器的真挺端口

《计算机网络》课程标准

《计算机网络》课程标准 授课对象:高中毕业或同等学力课程教学时数:96H 学历层次:高等职业教育课程代码: 学制:全日制3年 适用专业:计算机应用技术制订: 一、前言 1.课程性质 《计算机网络》是计算机专业的必修的专业核心课程。主要培养学生计算机网络的基本操作和基础知识。要求学生通过学习计算机网络课程,熟悉网络的机构、网络协议、常见的网络命令等;掌握常见的网络设备的安装、调试、维护和基本的网络知识; 2.课程设计思路 (1)课程基本理念: 本课程采用理论实践一体化教学模式,总课时96课时,理论课时40学时,实践课时56学时。要求学生深入了解和掌握计算机网络的基本概念、基本原理和技术方法。能够掌握计算机网络体系结构、局域网、广域网、TCP/IP协议、网络操作系统和Internet等内容。 (2)课程设计思路: 《计算机网络》课程是以就业为导向,以能力为本位、以职业实践为主线、以项目教学为主体的原则进行设计。本课程共设*个专业教学项目,其中必修项目*个,提高项目*个,可根据不同学生在提高项目选取。教学过程中将学生应知应会的理论知识融入到具体项目中,以项目为载体,让学生看到成果,提升学生的学习兴趣,帮助学生掌握提高理论知识、动手技能,拓宽知识面。 二、课程目标 依据企业职业岗位需求和专业培养目标,确定本课程的培养目标为: 通过课程学习,使学生具备良好的计算机网络基本理论基础,在职业技能上达到熟练安装、调试常见网络设备,掌握网络的基本操作和基础知识;同时,将方法能力及社会能力培养全面贯穿于教学全过程,培养学生的综合职业素质。 具体目标为: 1.专业能力目标 (1) 掌握课程中所介绍的有关的基本术语、定义、概念和规律,在今后的学习和工作中应能较熟练地应用这些概念和术语。 (2) 理解网络的基本分析方法及改善系统性能的主要途径。要求能对简单的故障独立进行排除。

2017操作系统(含课程设计) - 随堂练习

随堂练习提交截止时间:2017-12-15 23:59:59 当前页有10题,你已做10题,已提交10题,其中答对10题。 1.(单选题) 操作系统是基本的特征是() A、并发 B、共享 C、虚拟 D、异步 答题: A. B. C. D. (已提交) 参考答案:A 问题解析: 2.(单选题) 下面不属于操作系统设计目标的是() A、提高资源利用率 B、提高系统吞吐量 C、用户操作计算机更方便 D、并行执行多个进程 答题: A. B. C. D. (已提交) 参考答案:D 问题解析: 3.(单选题) 历史上最早出现的操作系统是() A、单道批处理系统 B、多道批处理系统 C、分时系统 D、实时系统 答题: A. B. C. D. (已提交) 参考答案:A 问题解析: 4.(单选题) 实时操作系统必须在()内处理完来自外部的事件。 A、响应时间 B、周转时间 C、被控对象规定时间 D、调度时间 答题: A. B. C. D. (已提交) 参考答案:C 问题解析: 5.(单选题) 操作系统是对()进行管理的软件。 A、软件 B、硬件 C、计算机资源 D、应用程序 答题: A. B. C. D. (已提交) 参考答案:C 问题解析: 6.(单选题) 配置了操作系统的计算机是一台比原来的物理计算机功能更强的计算机,这样的一台计算机只是一台逻辑上的计算机,称为()计算机。 A、并行 B、真实 C、虚拟 D、共享 答题: A. B. C. D. (已提交)

问题解析: 7.(单选题) 操作系统中采用多道程序设计技术提高了CPU和外部设备的() A、利用率 B、可靠性 C、稳定性 D、兼容性 答题: A. B. C. D. (已提交) 参考答案:A 问题解析: 8.(单选题) 在操作系统中,并发性是指若干事件____发生( ) A、在同一时刻 B、在不同时刻 C、在某一时间间隔内 D、依次在不同时间间隔内 答题: A. B. C. D. (已提交) 参考答案:C 问题解析: 9.(单选题) ()操作系统允许在一台主机上同时联接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A、网络操作系统 B、批处理操作系统 C、实时操作系统 D、分时操作系统 答题: A. B. C. D. (已提交) 参考答案:D 问题解析: 10.(单选题) 下面关于操作系统的叙述中正确的是 ( ) A、批处理作业必须提交作业控制信息 B、分时系统不一定都具有人机交互功能 C、从响应时间的角度看,实时系统与分时系统差不多 D、由于采用了分时技术,用户可以独占计算机的资源 答题: A. B. C. D. (已提交) 参考答案:A 问题解析:

网络课程设计实验报告--QQ聊天实现

计算机网络课程设计报告 设计选题网络聊天室 姓名马继鸣 学号 0909090630 完成时间 2012-1-12 一、需求分析

聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。用多线程可完成多点对多点的聊天。 主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现群聊,用户登陆,退出聊天系统等功能。 二. 设计 1.设计思想: 课程设计中利用JAVA实现基于C/S模式的聊天程序。聊天室共分为服 务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客 户端登录到服务器端才可以实现正常的聊天功能。

2.功能设计 (1)服务器端的主要功能如下。 在特定端口上进行侦听,等待客户端连接。用户可以配置服务端的侦听端口,默认端口为10000. 当停止服务时,断开所有用户连接。 (2)客户端的主要功能如下。 连接到已经开启聊天服务的服务端。 当服务器端开启的话,用户可以随时登录与注销。

用户可以向所有人发送消息。 3.详细设计 聊天室服务器端设计 聊天室服务器中主要的功能文件的功能如下: MyButLis.java 主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。 public class MyButLis implements ActionListener private MyServe server; private JTextField filed1; public void actionPerformed(ActionEvent e) MyChatSet.java 服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。关键在于除了线程之外,还定义了传输数据时的协议内容,如何分辨不同的信息,如聊天信息,登陆信息,上下线信息,并把信息完整准确的传递。 public static ArrayList servers=new ArrayList();//线程队列 public static void addThread(MyserThread th) //增加一个服务器线程对象 public static void sendReMess(String type,String state,String s,MyserThread myth)//返回应答信息 public static void SendOSMess(String type,String user)//其他用户上下线信息 public static void SendChatMess(String type,String sender,String reciver,String Mess)//聊天信息 public static void SendList//用户列表 MyCheckTool.java 保存用户的登陆信息,在其中建立一个码表,并且可以判断登陆信息是否合法。 //建立码表,用以保存用户信息 private static Map maps=new HashMap(); public static boolean CheckUser(MyUserInfo user)// 验证用户名

操作系统课程设计论文

学年论文(课程设计)题目:操作系统课程设计 学院数学与计算机学院 学科门类工学 专业网络工程 学号 姓名 指导教师王煜 年月日

河北大学学年论文(课程设计)任务书 (指导教师用表) 指导教师签字: 系主任签字: 主管教学院长签字: 装 订 线

河北大学学年论文(课程设计)成绩评定表学院:数学与计算机学院 装 订 线

摘要 此系统实现了存储管理、设备管理和进程管理。 存储管理部分主要实现主存空间的分配和回收。存储管理采用可移动的可变分区存储管理方式。采用数组来模拟主存,大小为512个字节。 设备管理主要包括设备的分配和回收。模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。设备分配时采用采用先来先服务策略。设备回收时唤醒等待设备的进程。 进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。其中硬件中的中央处理器用不断循环的函数CPU( )模拟,重要寄存器(如:程序状态寄存器PSW、指令寄存器IR)用全局变量模拟,中断的发现是在函数CPU中加检测PSW 的方式来模拟,时钟的模拟通过timer控件实现。进程控制块的模拟通过数组,本系统最多容纳10个。进程调度时采用时间片轮转调度算法,时间片为5。 关键词:存储管理设备管理进程管理时间片

ABSTRACT The system has storage management, equipment management and process management. The storage management has achieved the allocation and recovery of the main memory space. Variable storage management is used as storage management .We simulate the main memory by array, whose size is 512 bytes. The device management, including the distribution and recovery of devicet. We simulate three devices ,A,B,C. the numbers of them are 3,2,1. The distribution of device used to adopt first-come first-service strategy. It awakes the blocking process when the device is recycled. The process management, including scheduling ,creating revocation ,blocking and waking up the process, the realization of the interruption.We simulate the central processing unit by the cycling function named CPU(),simulate the important register by global variable, simulate the recovering of interruption by checking PSW in the function of CPU(),simulate the clock by the timer control. The simulation of the process control block by array, whose number is up to 10. When the scheduling of the process happens, we use the algorithm of time piece rotation scheduling, and the time piece is 5. Key words: storage device process time

网络操作系统课程设计报告

《网络操作系统》 课程设计报告书 题目:最佳适应算法 学号: 121007335 学生姓名:张梦思 专业:网络工程 指导教师:余建国 2014年5月31日

目录 1 功能描述 (3) 1.1总体思想........................................................................................... 错误!未定义书签。 1.2算法分析.................................................................................. 错误!未定义书签。 2 系统设计 (3) 3 系统实现 (5) 4 系统测试与分析 (7) 教师评分表 (10)

1 功能描述 1.1 总体思想 最佳适应算法是动态分区分配的一种内存分配算法。所谓最佳是指每次为作业分配内存时,总是把能满足要求,又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成以空闲分区链。这样,第一次找到的能满足要求的空闲区,必然是最佳的。 1.2算法分析 按空闲分区大小从小到大排列; 每次变换后,按空闲分区大小从小到大排列。 2 系统设计 2.1最佳适应算法的实现有好多种,比如链表,本次程序中使用数组来实现,实现了最基本的功能,没有考虑到内存的回收问题。

3 系统实现 这个程序是通过vc6.0软件用c语言编译而成,为了实现最佳适应算法,使用了数组,直接选择排序 程序代码 #include void main() { int m,n,i,j,j0,k,k0,A[30][3],B[30]; printf("请输入空闲分区块数:"); scanf("%d",&m); printf("\t分区号\t\t大小\t\t起始地址\n"); for(i=0;i

操作系统(一个小型操作系统的设计与实现)课程设计

南通大学计算机科学与技术学院操作系统课程设计报告 专业: 学生姓名: 学号: 时间:

操作系统模拟算法课程设计报告 设计要求 将本学期三次的实验集成实现: A.处理机管理; B.存储器管理; C.虚拟存储器的缺页调度。 设计流程图 主流程图 开始的图形界面 处理机管理存储器管理缺页调度 先来先服务时 间 片 轮 转 首 次 适 应 法 最 佳 适 应 法 先 进 先 出 L R U 算 法

A.处理机调度 1)先来先服务FCFS N Y 先来先服务算法流程 开始 初始化进程控制块,让进程控制块按进程到达先后顺序让进程排队 调度数组中首个进程,并让数组中的下一位移到首位 计算并打印进程的完成时刻、周转时间、带权周转时间 其中:周转时间 = 完成时间 - 到达时间 带权周转时间=周转时间/服务时间 更改计时器的当前时间,即下一刻进程的开始时间 当前时间=前一进程的完成时间+其服务时间 数组为空 结束

2)时间片轮转法 开始 输入进程总数 指针所指的进程是 否结束 输入各进程信息 输出为就绪状态的进程的信息 更改正在运行的进程的已运行时间 跳过已结束的程序 结束 N 指向下一个进程 Y 如果存在下一个进程的话 Y N 输出此时为就绪状态的进程的信息 时间片轮转算法流程图

B.存储器管理(可变式分区管理) 1)首次适应法 分配流程图 申请xkb内存 由链头找到第一个空闲区 分区大小≥xkb? 大于 分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为(后向指针)+xkb;修改上一个空闲区的前向指针为(前向指针)+xkb 将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针 等于 小于延链查找下 一个空闲区 到链尾 了? 作业等待 返回是 否 登记已分配表 返回分配给进程的内存首地址 开始

操作系统课程设计题目

实验一进程调度 一、实验目的 观察、体会Linux 系统的进程调度方法,并通过一个简单的进程调度模拟程序的实现,加深对进程调度算法,进程切换的理解。 二、实验内容 采用动态优先数的方法,编写一进程调度程序模拟程序。模拟程序只进行相应的调度模拟操作,不需要实际程序。 [提示]: (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为: 进程名 指针 要求运行时间 优先数 状态 其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。 指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。 要求运行时间——假设进程需要运行的单位时间数。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。 (3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。 (4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实习是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行: 优先数-1 要求运行时间-1 来模拟进程的一次运行。 提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。 (5) 进程运行一次后,若要求运行时间?0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。 (6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,

JAVA课程设计聊天室系统

Java课程设计指导书(学生版初稿) 第二章聊天室系统 目标 2.1 背景介绍 2.1.1 业务背景 2.1.2 技术背景 2.2 需求分析 2.2.1功能需求分析 2.2.2 业务对象分析 2.2.3 验收测试要求 2.3 系统设计 2.3.1 总体设计 2.3.2 详细设计 2.4 系统实现 2.5 小结 2.6 展望

第二章聊天室系统 学习目标: 1、理解基于网络的C/S模式的软件系统结构,掌握网络编程的基本概念。 2、了解Java 的多线程机制,掌握Java多线程技术的应用。 3、熟练掌握基于TCP协议的Socket编程。 4、了解Socket编程的协议约定,掌握简单应用协议的开发。 5、进一步巩固发展团队协作能力。 学习寄语:想必大家都用过QQ,其主要功能就是聊天,是不是很想知道它是如何实现的?本项目就是帮你实现一个简单的聊天系统,当然跟商业项目没法比,但从中你却可以了解这些系统是如何实现的,学到开发类似系统的基础知识和基本技能(基本并不意味不实用)。本章的内容有一定难度(多线程、基于TCP的应用协议编程),所以系统的开发采用了“增量迭代”的开发方式,由简易到繁难,希望你能顺利前行。我们的信念依然是:“不抛弃,不放弃”。你的改变和收获依然是老师真诚的期待,期待你更踏实、更自信。Come on!

2.1 背景介绍 2.1.1 业务背景 随着网络社会的不断发展,具有相同兴趣的网民需要互相远程交流,既要能省钱又要能即时交互,电话太贵、email又嫌慢,所以开发一个类似QQ 的及时通讯系统就变得非常有意义了。“Happy Chat”聊天系统应运而生,它较之QQ 的唯一好处是自主开发,用的放心,更适合在局域网内使用。它提供的功能远不如QQ丰富,但应具有如下功能:(1)与聊天室成员一起聊天;(2)可以与聊天室成员私聊;(3)用户注册、登录;(4)服务器监控聊天内容;(5)服务器发送通知;(6)服务器踢人;(7)保存服务器日志。(8)保存用户聊天信息。 2.1.2 技术背景 本系统要求使用java技术开发,使用文件保存数据,集成开发环境使用eclipse。开发者应有java程序设计语言、SWING基本GUI组件、多线程、文件使用、socket编程、使用eclipse的基本知识和技能。系统采用两层C/S体系结构,C端负责通过GUI与客户交互,实现注册、登陆、收发信息、退出等功能;S端是聊天系统的应用服务器,主要有处理用户注册、登录、用户收发信息、用户退出等功能。C端和S端是通过网络交互的,其基本原理如图1所示: 图1 C/S通讯基本原理图

网络操作系统课程设计计划书

10级网络工程专业《网络操作系统》课程设计 教学计划 2012-2013学年第一学期 一、实习目的与要求 1、掌握操作系统基本理论与管理方式; 2、在算法基础上,解决实际的管理功能问题,提高学生实际应用、编程的能力; 3、涉及编程题目时,要求详细书写文档内容。 二、实习内容 项目一、进程机制与并发程序设计 (一) linux下生产者与消费者的问题实现 1.实验目的 (1)掌握基本的同步互斥算法,理解生产者和消费者同步的问题模型。 (2)了解linux中多线程的并发执行机制,线程间的同步和互斥。 2、实验要求 (1)创建生产者和消费者线程 在linux环境下,创建一个控制台进程,在此进程中创建n个线程来模拟生产者或者消费者。这些线程的信息由本程序定义的“测试用例文件”中予以指定。 该文件的格式和含义如下: 3 1 P 3 2 P 4 3 C 4 1 4 P 2 5 C 3 1 2 4 第一行说明程序中设置几个临界区,其余每行分别描述了一个生产者或者消费者线程的信息。每一行的各字段间用Tab键隔开。不管是消费者还是生产者,都有一个对应的线程号,即每一行开始字段那个整数。第二个字段用字母P或者C区分是生产者还是消费者。第三个字段表示在进入相应线程后,在进行生产和

消费动作前的休眠时间,以秒计时;这样做的目的是可以通过调整这一列参数,控制开始进行生产和消费动作的时间。如果是代表生产者,则该行只有三个字段。如果代表消费者,则该行后边还有若干字段,代表要求消费的产品所对应的生产者的线程号。所以务必确认这些对应的线程号存在并且该线程代表一个生产者。(2)生产和消费的规则 在按照上述要求创建线程进行相应的读写操作时,还需要符合以下要求: ①共享缓冲区存在空闲空间时,生产者即可使用共享缓冲区。 ②从上边的测试数据文件例子可以看出,某一生产者生产一个产品后,可能不止一个消费者,或者一个消费者多次地请求消费该产品。此时,只有当所有的消费需求都被满足以后,该产品所在的共享缓冲区才可以被释放,并作为空闲空间允许新的生产者使用。 ③每个消费者线程的各个消费需求之间存在先后顺序。例如上述测试用例文件包含一行信息“5 C 3 l 2 4”,可知这代表一个消费者线程,该线程请求消费1,2,4号生产者线程生产的产品。而这种消费是有严格顺序的,消费1号线程产品的请求得到满足后才能继续往下请求2号生产者线程的产品。 ④要求在每个线程发出读写操作申请、开始读写操作和结束读写操作时分别显示提示信息。 (3)相关基础知识 本实验所使用的生产者和消费者模型具有如下特点: 本实验的多个缓冲区不是环形循环的,也不要求按顺序访问。生产者可以把产品放到目前某一个空缓冲区中。 消费者只消费指定生产者的产品。 在测试用例文件中指定了所有的生产和消费的需求,只有当共享缓冲区的数据满足了所有关于它的消费需求后,此共享缓冲区才可以作为空闲空间允许新的生产者使用。 本实验在为生产者分配缓冲区时各生产者间必须互斥,此后各个生产者的具体生产活动可以并发。而消费者之间只有在对同一产品进行消费时才需要互斥,同时它们在消费过程结束时需要判断该消费对象是否已经消费完毕并清除该产品。

相关文档
最新文档