JavaQQ聊天界面实验报告.docx

上传人:b****1 文档编号:201745 上传时间:2023-04-28 格式:DOCX 页数:12 大小:49.80KB
下载 相关 举报
JavaQQ聊天界面实验报告.docx_第1页
第1页 / 共12页
JavaQQ聊天界面实验报告.docx_第2页
第2页 / 共12页
JavaQQ聊天界面实验报告.docx_第3页
第3页 / 共12页
JavaQQ聊天界面实验报告.docx_第4页
第4页 / 共12页
JavaQQ聊天界面实验报告.docx_第5页
第5页 / 共12页
JavaQQ聊天界面实验报告.docx_第6页
第6页 / 共12页
JavaQQ聊天界面实验报告.docx_第7页
第7页 / 共12页
JavaQQ聊天界面实验报告.docx_第8页
第8页 / 共12页
JavaQQ聊天界面实验报告.docx_第9页
第9页 / 共12页
JavaQQ聊天界面实验报告.docx_第10页
第10页 / 共12页
JavaQQ聊天界面实验报告.docx_第11页
第11页 / 共12页
JavaQQ聊天界面实验报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JavaQQ聊天界面实验报告.docx

《JavaQQ聊天界面实验报告.docx》由会员分享,可在线阅读,更多相关《JavaQQ聊天界面实验报告.docx(12页珍藏版)》请在冰点文库上搜索。

JavaQQ聊天界面实验报告.docx

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开发积累了更多经验。

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2