版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络程序设计考试大作业
题目:聊天室程序
班级:
学号:
姓名:
成绩:
网络程序设计考试大作业...................................1
一.所使用的背景知识、主要函数的描述..................3
程序设计思想及程序设计流程框图...................3
三.主要代码及代码运行结果..........................4
1.启动服务器.......................................4
2.登录.............................................6
3.注册............................................10
4.登录和注册判定..................................12
5.进入聊天界面...................................13
6.私聊页面17
一.所使用的背景知识、主要函数的描述
背景:根据现在最流行的聊天工具QQ,模仿•部分主要功能求完成。
主要函数:
publicclassServer;服务器的创建。
publicclassClient;客户端的创建。
publicclassMainextendsJFrame;登录界面的显示。
publicclassRegistextendsJDialog;注册界面的显示。
publicclassUserinformation;用户信息的保存和验证。
publicclassAllTalkFrameextendsJFrame;登录后进入群聊界面。
publicclassPointTcPointTalkFrameextendsJFrame;私聊界面。
二.程序设计思想及程序设计流程框图
设计思想:
利用socket与serversocket在客户端与客户端之间的通信,InputStream
TnputStreamReader输入输出流进行信息的发送与接收。
程序设计流程:
主页面:输入账号与密码,点击登录或者注册进入下一页面。
登录:判定是否正确,正确则进去聊天界面。
注册:进去注册界面,成功则返回主页面。
进入聊天室:能发送信息让在线的所有人看到。
私聊界面:能与一个人单独聊天,信息只能被双方看到。
三.主要代码及代码运行结果
L启动服务器
代码:
publicclassServer{
ServerSocketserver;
staticintclientNum=0;
//存放与服务器连接上的对应的Socket,作用是保存服务器与客户端之间的流,
便于服务器给每个客户端进行回发消息
List<Socket>clientConnection=newArrayList<Socket>();
publicServer0{
try{
server=newServerSocket(9999);
System.out.printIn("服务器已经启动〃);
}catch(lOExceptione){
e.printStackTrace0;
System.out.printin(〃服务器启动失败〃);
}
//内部类,监听客户端是否有连接到服务器,并将此客户端的Socket传递给
HandleSocket进行处理,同时将client存放到List中,BPclientconnection
classSocketListenerimplementsRunnable(
publicvoidrun(){
Socketclient;
try(
while(true){
client=server,accept();
//连接上一个就压入List中,即clientConnection中
clientConnection.add(client);
HandleSockeths=newHandleSocket(client);
//连接上就让HandleSocket去处理
newThread(hs).start();
)
}catch(lOExceptione){
Systeir.out.printin(“客户连接服务器失败”);
//内部类处理一个Socket,接收一个Client发送过来的消息,并且服务器原
封不动的返回给所有客户端,客户端对消息进行过滤
classHandleSocketimplementsRunnable{
Socketclient;
HandleSocket(Socketclient){
this.client=client;
)
publicvoidrun(){
try(
clientNum^^;
//启用输入流
TnputStreamis二client.getTnputStreamO;
InputStreamReaderisr=newInputStreamReader(is);
BufferedReaderbr=newBufferedReader(isr);
Systeir.out.printin(〃第〃+clicntNum+〃个客户端连接进入服务
器”);
booleanflag=true;
Strings;
do{
//对用户发来的消息进行群发给客户端
s=br.readLineO;
System.out.printin(〃接受到一个客户端消息:"+s);
for(inti=0;i<clientConnection.sizeO;i++){
Socketclient=clientConnection.get(i);
Outputstreamos=client.getOutputStreamO;
PrintStreamps=newFrintStream(os);
ps.printin(s);
}
}while(flag);
client,close0;
}catch(lOExceptione){
Systerr.out.printIn(〃有一个客户断开与服务器的连接〃):
)
界面:
51x
QuickAccess|:1酹|屋JavaEE同」Java
JMarke...□Prop...用Serve...强Data...也Snipp...曰Cons...汉
Bx二|鼠⑪匣固|日用▼n▼
Server[JavaApplication]D:\jdk7\bin\javaw.exe(2015^6月18日下午12:04:36)□
服务器已经启动
累
R
国
2.登录
代码:
paukcigecum.qq.nidiii;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvcnt;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel:
importjavax.swing.JOptionPane;
importjavax.swing.JPasswordField;
importjavax.swing.JTextField;
importcom.qq.regist.Regist;
importcom.qq.regist.UserInformation;
/**
*主界面
*/
publicclassMainextendsJFrame{
〃组件的内容
privateJLabeluserid;
privateJLabeluserPassword;
privateJTextFieldinputld;
privaleJPasswordFieldinpuiPassword;
privateJButtonbtLogin;
privateJButtonbtRegist;
Main(){
userid=newJLabel("帐号");
userPassword=newJLabel(〃密码〃);
inputld=newJTextField(6);
inputPassword=newJPasswordField();
btLogin=newJButton("登陆”);
btRegist=newJButton(〃注册“);
//设置窗体属性
Toolkittk=Toolkit.getDefaultToolkit();
DimensionscreenSize=tk.getScreenSizeO;〃得到当前屏幕的长和宽
intx=(int)screenSize.getWidthO;
inty=(int)screenSize.getHeight();
this.setBounds((x-240)/2,(y-600)/2,240,600);〃窗口显示
的大小,位置
this.setResizable(false);〃窗口大小不能改变
this.setLayout(null);〃默认的格式
this.sctBackground(Color.BLACK);//窗口的颜色
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)"/退出程序
//设置JLabel属性
userid,setRounds(30,160,40,20):
userPassword.setBounds(30,200,40,20);
//设置文本域属性
inputld.setBcunds(90,160,100,20);
inputPassword.setBounds(90,200,100,20);
inputPassword.setEchoChar(**');〃用*显示代替你输入的密码
//设置JButton属性
btLogin.setBcunds(50,240,60,20);
btRegist.setBounds(120,240,60,20);
//注册“登陆”按钮监听器
btLogin.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Userlnformationuser=newUserlnformation();
StringuserName=inputld.getText();
StringuserPassword=new
String(inputPassword.getPasswordO);
if(userName.equals(〃〃))(
JOplionPane.showMessageDialog(nul1,〃用户名不能为空〃);
}elseifequals(userPassword)){
JOptionPane.showMessageDialog(null,〃密码不能为空〃);
}elseif(user.isExist(userName)
&&user,userInfomation.getPropert)?(userName).equals(
userPassword)){
newAlITalkFrame(userName).setVisible(true);//判断成功
后new一个群聊窗口
Main.this,dispose();
}else{
JOptionPane.showMessageDialog(null,〃此用户名不存在或者
密码不正确〃);
)
}
});
//注册“注册”按钮监听器
btRegist.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
newRegistO;//注册页面
}
});
this,add(userid);
this.add(userPassword);
this,add(inputld);
this,add(inputPassword);
this.add(bt.Login);
this,add(btRegist);
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
newMain();
)
)
界面;
3.注册
代码:
//注册“提交”按钮的监听器
btSubmit.addActiuiiLibleiiex(newActiciiListeiiex0{
publicvoidactionPerformed(ActionEvente){
StringuserName=inputld.getText();
StringuserPassword=new
String(inputPassword.getPassword());
StringuscrPasswordConfirm=newString(inputPasswordConfirm
.getPasswordO);
Systen..out.printin("您点击了提交按钮”);
if(userName.equals(〃〃)){
JOptionPane.showMessageDia11,〃用户名不能为空〃);
}elseif(,//z.equals(userPassword)
〃〃.equals(userPasswordConfirm)){
JOptionPanc.sliowMcssagcDialog(x^iYX,〃密码和密码重复都不
能为空”);
}elseif(!userPassword.equals(userPasswordConfirm)){
JOptionPane.showMessageDialog(j^i].1,〃密码和密码重复不一
致〃);
}else{
UserInformationuser一newUscrlnformation();
if(user.isExist(userName)){
JOptionPane.showMessageDialogixwi11,“此用户名已存在
〃);
}else{
JOptionPane.showMessageDialogix^A1,〃注册成功〃);
user,insert(userName,
userPassword);//UserInformation类
Regist.this,dispose();
)
}
)
});
//注册“取消”按钮的监听器
btCancel.addActionListener(newActicnListener(){
publicvoidactionPerformed(ActionEventc){
Systen...printin("您点击了取消按钮”);
Regist.this,dispose();
)
});
界面:
未登录。D・?▼
轸品*
文字工具^查找普操^选择▼
帐号(呢桥丽垣中文
密码
密码重复
提交取函一
4.登录和注册判定
代码:
〃注册一个用户
publicvoidinsert(StringuserName,StringuserPassword){
try{
userinfomation=newProperties();
InputStreamis;
OutputStreamos;
is=new(z,c:/userinfo,properties7");
os=new(,zc:/userinfo,properties^,true);
userlnfomation.load(is);
//将用户名和密码存储到内存中
userlnfomation.setProperty(userName,userPassword);
//将用户名和密码保存到文件中
userlnfomation.store(os,null);
}catch(el){
System.out.printin("文件userlnfc.properties没有找到〃);
}catch(lOExceptione){
System.out.printIn(“写userinfo,properties出错〃);
)
}
〃判断此用户名是否存在
publicbooleanisExist(StringuserName){
try(
userlnfomation=newProperties();
InputStreamis;
is=new(z,c:/userinfo,properties7");
userlnfomation.load(is);
if(userlnfomation.containsKey(userName)){
returntrue;
)
}catch(el){
System,out.printin("文件userlnfc.properties没有找到");
}catch(TOExceptione){
System.out.printin(“写userinfo,properties出错〃);
)
returnfalse;
)
5.进入聊天界面
代码:
classshowOldMessageThreadimplementsRunnable{
publicvoidrun(){
booleanflag=true;
while(flag){
try{
//接收群聊服务器端回发过来的消息
StringserverOutput=client,br.readLine()+〃\r\rT;
if(!serverOutput.startsWith(〃私聊〃)
&&!serverOutput.startsW'ith(〃*〃)
&&!(serverOutput.substring(serverOutput
.indexOf(":〃)+1).equals(〃\r\n〃))){
Stringsi=serverOutput.replace'');
Strings=si.replaceAl1(〃❷〃,〃\r\n〃);
oldMessageTextArea.append(s);
//添加客户端的用户在线列表
if(!serverOutput.startsWith("*〃)
&&!serverOutput.startsWith(〃私聊〃)
&&(serverOutput.indexOf(〃说〃)!=-1)){
StringlistName=serverOutput.substring(0,
serverOutput.indexOf('说'));
//如果JList中有相同名字的用户,则不添加,否则添加
if(!users,contains(1istName)){
System.out.printin(〃用户〃+listName+〃上线了〃);
users,add(listName);
userLisl.setLislData(users);
}
)
//判断服务器回发过来的消息是不是以〃私聊〃开头的,是的话
就提取出这两个用户名
if(serverOutput.startsWith(“私聊〃)){
StringsiliaoNamcl=serverOutput.substring(
serverOutput.indexOf(〃*〃)+1,serverOutput
.indexOf(〃和"));
StringsiliaoName2=serverOutput.substring(
serverOutput.indexOf(〃和")+1,serverOutput
.indexOf;
StringsiliaoBenshen=
Stringsi1iaoDuixiangName=〃〃;
if(si1iaoName1.equals(c1ientName)){
si1iaoBenshen=si1iaoName1;
si1iaoDuixiangName=siliaoName2;
}else{
siliaoBenshen=siliaoNamc2;
si1iaoDuixiangName=siliaoNamel;
}
〃判断这两个名字中是否有与自己同名的,有的话就弹出
个私聊窗口
if(siliaoNamel.equals(c1ientName)
si1iaoName2.equals(clientName)){
newPointToPointTalkFramc(si1iaoBenshen+〃和〃
+si1iaoDuixiangName).setVisible(true);
)
)
}catch(TOExceptionel){
System.printin(〃读取服务器端消息出错〃);
)
)
)
)
〃注册JList的点击事件,进入私聊界面
userList.addMouseListener(newMouseAdapter(){
publicvoidmousedicked(MouseEvente){
if(c.gctClickCount()-2){
if(AllTalkFrame.this.userList.getSelectedValue()
.toStringO.equals(clientName)){
JOptionPane.showMessagcDiaIog(nul\,〃不能和自己聊天
〃);
}else{
StringPToPMemberName=〃私聊”
+〃*〃
+clientName
+〃和〃
+
AllTalkFrame.this.userList.getSelectedValue()
.toStringO;
client,ps.prin11n(PToFMemberName);
)
1
)
});
界面:
E-Markers]Properties泉Servers腮DataSourceExp...也SnippetsSConsole》
-E
入
w.(201
务
n善
rR
蔡
说
力□
•、
n务
丈7•1
高户
在
息
W山.1
法V
而?•z
山
i息r
户v1T2
S而•^
j削•
客
30说
息
、
而
^户•12
量
n一
山
削
户R•
{而,vfl•
M息
各7•
S山•
客•
户
而.
息•1
V削
法•
山?•
说
客
1L1子
息
而l
s户7l
山/
力
客—
息
7肯
而
篁•h
户•
山
者
客
1息
而7•
6.私聊页面
代码:
〃线程:只要服务器端有消息,就将消息显示到oldMessageTexlArea
classshowOldMessageThreadimplementsRunnable{
publicvoidrun(){
booleanflag=true;
while(flag){
try(
//接收服务器端回发过来的消息
StringserverOutput二client.br.readLine0+
System.out.printin(〃私聊服务器发过来的消息:〃+
serverOutput);
//将消息中的两个用户名提取出来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 转科医生述职报告范文(3篇)
- 2026年危化品安全员考试题库及答案
- 2026年急危重患者抢救制度试题及答案
- 2026年药品管理法(修订版)培训试题及答案解析
- 医院医疗卫生法律法规考试试题及答案
- 高校思想政治工作调研报告(3篇)
- 设立中外合资经营企业合同(2026版)
- 2026年木材行业碳减排技术评价
- 2026中国水产饲料替代蛋白源研发进展与养殖效益分析报告
- 施工现场安全防护、文明施工及消防保卫综合培训
- 2026年自来水公司客户综合运维招聘考试笔试试题(含答案)
- 2026心肺复苏理论考试试题及答案
- 2023 悬索桥猫道设计与施工技术规程
- 2026年度电力工程造价从业人员专业能力评价(电力工程造价管理)练习题库
- 2026学校食堂食品安全培训
- 2025四川绵阳科技城科技创新投资有限公司合规风控部合规风控主管岗位招聘笔试历年参考题库附带答案详解
- DB11-T 489-2024 建筑基坑支护技术规程
- 丛集性头痛护理查房
- 2026年及未来5年市场数据中国城市河道治理行业发展趋势预测及投资战略咨询报告
- HY/T 0498-2025海洋测量无人船通用技术条件
- 中医院奖惩制度实施细则
评论
0/150
提交评论