基于JAVA局域网聊天程序设计与实现(5)

2018-11-17 19:18

工程技术学院毕业设计(论文)专用纸

聊天系统工作原理图

3.3 JAVAqq局域网聊天程序各功能模块

1.LoadingFrame(源代码见附录,下同)

public void init(){//登陆界面的初始化方法 }

setTitle(\登录\

setIconImage((new ImageIcon(\??

setLocation(387, 234); setSize(350,300); setVisible(true);

setDefaultCloseOperation(3);

loadBtn.addActionListener(this);//将“登陆”按钮加入到事件侦听器中 cancelBtn.addActionListener(this);//讲“取消”按钮加入到事件侦听器中 nameText.addActionListener(this);//讲输入用户名的文本框加入到事件侦听器中 this.setResizable(false);

public void actionPerformed(ActionEvent e) {

if(e.getSource()==loadBtn||e.getSource()==nameText){//创建客户端主界面

text=nameText.getText(); new StateFrame(text); dispose();

16 第 页

工程技术学院毕业设计(论文)专用纸

}

}else if(e.getSource()==cancelBtn){//取消登录,推出程序 }

dispose(); System.exit(0);

程序的登录窗口,从此窗口中,输入用户名,点击“登陆”来初始化一个StateFrame

对象,并在显示器上显示出客户端的主界面。在后期的完善中,会完成记住用户名及自动登录功能。主要通过将用户名写入一个记事本保存起来。 2.StateFrame

public final static int DEFAULT_PORT=8322;//默认端口 public final static int CATCH_PORT=7322;

public final static int TCP_PORT=6322;//默认TCP连接端口 public void init(){//初始化应用程序窗口

??

friList.addActionListener(new ActionListener(){

//用ActionListener接口来对图形界面中的各个组件进行监听

public void actionPerformed(ActionEvent e) {

//双击登录到列表框内容时触发的事件为连通列表框中的IP,建立TCP通信 Socket socket;

int s=friList.getSelectedIndex();

String address=userinfo[s].getIP();//获取对方IP try {

socket=new Socket(address,TCP_PORT);//建立连接

MainChatFrame mf=new MainChatFrame(socket,userinfo[s].getName());

//启动私聊主界面

} catch (Exception e1) {e1.printStackTrace();}

}});

??

//初始化UDP协议端口信息

//首先向已在线的程序发送本机的IP以及请求响应并对相应的组播端进行监听 public void JoinGroup(){

17 第 页

工程技术学院毕业设计(论文)专用纸

try {

group=InetAddress.getByName(\初始化广播聊天信息组 groupC=InetAddress.getByName(\初始化登录信息组 socket=new DatagramSocket(); byte notify[]=new byte[100]; byte nametag[]=new byte[20]; nametag=name.getBytes();

//发送一个登录信息给已登录的用户,通知他们本程序上线。 //包的数据结构为:判断位+用户名+IP地扯+用户名长度 notify=new String(\

+InetAddress.getLocalHost().getHostAddress()+name.length()).getBytes();

packet=new DatagramPacket(notify,notify.length,groupC,CATCH_PORT); socket.send(packet);

socketC=new MulticastSocket(CATCH_PORT); socketC.joinGroup(groupC);

Catcher catcher=new Catcher(socketC,this,name,userinfo); CheckIn login=new CheckIn(this,userinfo);

} catch (Exception e) { e.printStackTrace(); }}

用来显示用用户名及在线人的窗口,并对窗口中各组件实施监听。让其可顺利生成

各个聊天主界面。 3.Catcher

//实现对组播端口的监听,并作出反映

public void run(){

try {socket=new DatagramSocket();

while(true){

byte[] Rdata=new byte[256];

packet=new DatagramPacket(Rdata,Rdata.length); Csocket.receive(packet);//等待接受数据包 String count=new

String(packet.getData()).substring(packet.getLength()-1,packet.getLength());

int num=Integer.parseInt(count);

//count记录了数据包的最后一位数,也就是记录了用户名的长度。

18 第 页

工程技术学院毕业设计(论文)专用纸

String check=new String(packet.getData()).

substring(1+num,packet.getLength()-1); //check为数据包的IP地址

String judge=new String(packet.getData()).substring(0,1); String usertag=new String (packet.getData()).substring(1,num+1); if(judge.equals(\

//judge为“C”时反送一个含有对方用户名以及本机的IP的数据包到组播组

}

??

public void Connect(String check){ //Connect()方法实现了对对方回应本机信息的过程,

//其中第一以及最后一个为无用信息,在接受方被吸收掉

??

CheckSocket=new Socket(check,CHECK_PORT); in=new BufferedReader(new

InputStreamReader(CheckSocket.getInputStream()));

out=new PrintWriter(CheckSocket.getOutputStream());

??

用来对登录信息的监听,并解析传送过来的数据包。 4.Listener

public void run(){

try {while(true){

}

byte[] Rdata=new byte[256];

packet=new DatagramPacket(Rdata,Rdata.length);//用Rdata数组来接收数据, MSocket.receive(packet);

//并传给MulticastSocket对象

SF.groupchat.processMsg(new String(packet.getData())); SF.groupchat.setVisible(true);ring();

} catch (IOException e) {

e.printStackTrace();}}

19 第 页

工程技术学院毕业设计(论文)专用纸

用来对群消息的监听及处理,将接收到的消息打包,传给MulticastSocket对象,再

利用CheckIn和Logon对象进行处理。 5.CheckIn

//对回应信息的端口的监听,一旦收到回应信息则开启一个新线程对其进行信息的接收

public void run(){

try {

Check=new ServerSocket(CHECK_PORT);

} catch (IOException e) {e.printStackTrace();} try {

while(true){

client=Check.accept();

Logon ll=new Logon(sf,client,userinfo); ll.start();}

} catch (IOException e) {e.printStackTrace(); }}

6.Logon

public void run(){

//run()方法实现对回应的TCP连接的信息的接收,并且完成对UserInfo信息的保存

String msg=null; Try{

msg=receiveMsg();

name=msg;//获取对方的名字 msg=receiveMsg(); ip=msg;//获取对方的IP { }

sf.processFriend(userinfo[k].getName()); msg=receiveMsg(); ??

}

k=sf.friList.getSelectedIndex(); userinfo[k]=new UserInfo(name,ip);

20 第 页


基于JAVA局域网聊天程序设计与实现(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:怀山药GAP基地建设可行性研究报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: