JavaQQ聊天界面实验报告.docx
- 文档编号:28430066
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:12
- 大小:52.38KB
JavaQQ聊天界面实验报告.docx
《JavaQQ聊天界面实验报告.docx》由会员分享,可在线阅读,更多相关《JavaQQ聊天界面实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
JavaQQ聊天界面实验报告
Java语言实验报告
实验环境:
Eclipse6.0环境
实验目的:
1、了解文件和流的概念,字节的输入输出,掌握文件的操作;
2、了解网络通信,掌握TCPSocket通信和TCPSocket的工作方式。
实验原理:
1、采用TCPSocket通信是实现的点对点聊天,ChatServer类提供服务端的TCP的链接服务,SingleTalkClient类与SingleTalkServer类实现客户端与服务端的TCPSocket通信以及两者的图形界面;
2、Socket对象用于在服务端和客户端的TCP链接之间进行发送和接受的双向数据通信,从Socket对象中能够获得字节输入流和字节输出流。
实验内容:
实现一对一的聊天程序
1、分析需求,确定程序主要框架、所需要的编程语言、以及开发环境;
2、研究一对一聊天程序的原理及主要功能;
3、根据实验要求编写聊天界面及聊天程序;
4、完成编码,进行测试;
5、完成测试,完善代码。
实验步骤:
一、创建客户端界面
packagejiemian;
importjava.io.*;
importjava.net.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
/**
*用户界面SingleTalkClient
*/
publicclassSingleTalkClientextendsJFrame{
privatestaticfinallongserialVersionUID=3774711323397279594L;
JTextAreamainArea;
JTextAreasendArea;
JTextFieldnameArea;
JButtonbuttonLink;
publicvoidsetClient(ChatClientclient){
this.client=client;
}
publicSingleTalkClient(){
super("用户");
Containercontain=getContentPane();
contain.setLayout(newBorderLayout());
mainArea=newJTextArea();
JScrollPanemainAreaP=newJScrollPane(mainArea);//为文本区添加滚动
条
JPanelpanel=newJPanel();
panel.setLayout(newFlowLayout());
sendArea=newJTextArea(3,30);
JButtonsendBtn=newJButton("发送");
JButtonleave=newJButton("离线");
JButtonsentMessage=newJButton("发送");
panel.add(leave);
sendBtn.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventae){
client.sendMsg(sendArea.getText());
mainArea.append("【用户】"+sendArea.getText()+"\n");
sendArea.setText("");
}
});
JPanelipPanel=newJPanel();
ipPanel.setLayout(newFlowLayout(FlowLayout.LEFT,10,10));
ipPanel.add(newJLabel("服务器:
"));
JPanelnamePanel=newJPanel();
namePanel.setLayout(newFlowLayout(FlowLayout.LEFT,10,10));
namePanel.add(newJLabel("昵称:
"));
nameArea=newJTextField(4);
nameArea.setText("");
namePanel.add(nameArea);
ipArea=newJTextField(12);
ipArea.setText("127.0.0.1");
ipPanel.add(ipArea);
buttonLink=newJButton("连接");
ipPanel.add(buttonLink);
buttonLink.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventae){
client=newChatClient
(ipArea
.getText(),8888,
SingleTalkClient.
this);//创建socket
对象
}
});
SingleTalkClient.this
.setClient(
client);
panel.add(sendBtn,BorderLayout.
EAST);
panel.add(sendArea,BorderLayout.CENTER;contain.add(ipPanel,BorderLayout.NORTH;
contain.add(namePanel,BorderLayout.WEST;
CENTER;
SOUTH;
EXIT_ON_CLOSE);
contain.add(mainAreaP,BorderLayout.contain.add(panel,BorderLayout.setSize(500,300);
setVisible(true);setDefaultCloseOperation(JFrame.
}
publicstaticvoidmain(String[]args){
SingleTalkClientui=—newSingleTalkClient();
}
}
/**this.ui=ui;
*/
BufferedReaderin;//声明输入流缓冲区,用于存储服务器发来的信息
PrintWriterout;//声明打印输岀流,用于信息的发送
SingleTalkClientui
try{
server=newSocket(ip,port);//创建server,用服务器ip和端口作参
数
System.out.println("已顺利联接到服务器。
");
out=newPrintWriter(server.getOutputStream(),true);
in=newBufferedReader(new
InputStreamReader(server.getInputStream()));
}catch(Exceptione){
System.out.println(e);
}
start();
}
publicvoidrun(){//用于监听服务器端发送来的信息
Stringmessaga="";
while(true){
try{
messaga=in.readLine();//从缓冲区读入一行字符存于message
}catch(SocketExceptionex){
System.out.println(ex);
break;
}catch(Exceptionex){
System.out.println(ex);
}
if(messaga!
=null&&messaga.trim()!
=""){//若message信息不
为空
System.out.println(">>"+messaga);
ui.mainArea.append(messaga+"\n");//把message信息添加到客户
端的文本区域内
}
}
}
publicvoidsendMsg(Stringmsg){//用于发送信息
try{
out.println("【用户】"+msg);
}catch(Exceptione){
System.out.println(e);
}
}
}
二、创建服务端界面
packagejiemian;
importjava.io.*;
importjava.net.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
/**
*服务端界面SingleTalkServer
*/
publicclassSingleTalkServer
extendsJFrame{
privatestaticfinallongserialVersionUID=1L;
JTextAreamainArea;
JTextAreasendArea
JTextFieldindexArea
ServerComserver;
publicvoidsetServer(ServerComserver){this.server=server;
publicSingleTalkServer(){
super("服务器端");
Containercontain=getContentPane();
contain.setLayout(newBorderLayout());mainArea=newJTextArea();
JScrollPanemainAreaP=newJScrollPane(mainArea
JPanelpanel=newJPanel();
panel.setLayout(newBorderLayout());
sendArea=newJTextArea(3,8);
JButtonsendBtn=newJButton("发送");
);
sendBtn.addActionListener(
{
newActionListener()//
注册动作监听器
端
mainArea.append("\n");//把信息显示在服务器的聊天记录区域
indexArea.setText(}
});
JPaneltmpPanel=newJPanel();
indexArea=newJTextField
(2);indexArea.setText("0");
tmpPanel.add(sendBtn);
tmpPanel.add(indexArea);
panel.add(tmpPanel,BorderLayout.
panel.add(sendArea,BorderLayout.
contain.add(mainAreaP,BorderLayout.contain.add(panel,BorderLayout.setSize(500,300);
setVisible(true);setDefaultCloseOperation(JFrame.
//把信息传递到客户
"【服务器】"+sendArea.getText()+
"0");
EAST);
CENTER;
CENTER;
SOUTH;
EXIT_ON_CLOSE);
publicstatic
voidmain(String[]args){
SingleTalkServerui=newSingleTalkServer();
ServerComserver=newServerCom(ui);//创建并启动网络通讯线程,准备接
受客户端数据包
*通讯类ServerCom负责守候数据到来
*/
classServerComextendsThread//网络通讯类
{
Socketclient;
ServerSocketsoc;
BufferedReaderin;
PrintWriterout;
SingleTalkServerui
//ChatServerserver;
publicServerCom(SingleTalkServerui){//初始化ServerCom类
this.ui=ui;
ui.setServer(this);
try{
soc=newServerSocket(8888);//开设服务器端口8888
System.out.println(“启动服务器成功,等待端口号:
8888");client=soc.accept。
;//当客户机请求连接时,创建一条链接
System.out.println("连接成功!
来自"+client.toString());
in=newBufferedReader(newInputStreamReader(client
.getInputStream()));
out=newPrintWriter(client.getOutputStream(),true);
}catch(Exceptionex){
System.out.println(ex);
}
start();
}
publicvoidrun(){//用于监听客户端发送来的信息
Stringmessage="";
while(true){
try{message=in.readLine();//从in对象上读数据信息
}catch(SocketExceptionex){System.out.println(ex);
break;
}catch(Exceptionex){System.out.println(ex);
}
if(message!
=null&&message.trim()!
=""){
System.out.println(">>"+message);
ui.mainArea.append(message+"\n");
}
}
}
publicvoidsendMsg(Stringmsg){//用于发送信息
try{
out.println(”【服务器】”+msg);//把信息写入输岀流
}catch(Exceptione){
System.out.println(e);
}
运行结果:
将IP地址改为另一个客户端的IP地址,启动两个客户端与服务端,当两个客户端成功链接服务器端后,就可以进行一对一的聊天了,两个客户都可以给对方发送消息,而且对方能收到。
实验总结:
本次实验用java语言编写了带有界面的一对一聊天程序,可以实现两个人一对一的聊天,但离真正的QQ聊天还是有很大的距离,比如未做能出菜单、头像、消息记录、背景等。
本次实验过程中我了解文件和流的概念,字节的输入输出,掌握了TCPSocket通信和TCPSocket的工作方式,为以后的Java学习打下了基础。
实验感悟:
我们平时经常使用QQ聊天,却很少知道其中的原理,通过这次实验我明白了聊天程序的运行原理和功能,知道了把理论知识与实际应用结合起来是一件不容易的事情,同时我也进一步掌握了java语言,对Eclipse开发环境更加熟悉,为以后java开发积累了更多经验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaQQ 聊天 界面 实验 报告