高手进,java实现聊天功能?

2022-03-21 综合 65阅读
。。。这个我以前也遇到过、不过我是用C#写的、不过后来也有java的、你可以、使用Swing做的简单界面,及使用Socket套接字实现简单聊天。。。。。。但是、我不知道你问的是C/S模式还是B/S模式?
其中、B/S模式可以用Servlet来实现,思路是通过Context上下文绑定参数实现
而C/S模式的,是通过RMI远程调用的方法实现的。。。先给你个C/S模式的核心代码。。。importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
importjava.net.*;publicclassServerextendsJFrame
{
publicstaticvoidmain(String[]args)
{
Serverserver=newServer();
//设定框架的关闭方式
server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示框架
server.setVisible(true);
server.pack();
CreateServercs=newCreateServer(server);
}
//设定框架的宽度和高度
privatestaticfinalintWIDTH=450;
privatestaticfinalintHEIGHT=450;
//聊天信息框
JTextAreamainArea=newJTextArea(12,35);
//发送信息的填写框
JTextAreasendArea=newJTextArea(5,30);

//构造函数
publicServer()
{
//定位框架
Toolkitkit=Toolkit.getDefaultToolkit();
DimensionscreenSize=kit.getScreenSize();//获取电脑当前分辨率
intwidth=screenSize.width;
intheight=screenSize.height;
intx=(width-WIDTH)/2;
inty=(height-HEIGHT)/2;
//设置窗口显示位置
setLocation(x,y);
//设置框架大小
setSize(WIDTH,HEIGHT);
//设置标题
setTitle("小新新聊天服务器");
//设置窗口的自定义大小
setResizable(false);
//在内容表格上创建3个面板并加入到内容表格
Containercon=this.getContentPane();
JPanellabelPanel=newLabelPanel();
con.add(labelPanel,BorderLayout.NORTH);
JPanelcontentPanel=newContentPanel();
con.add(contentPanel,BorderLayout.CENTER);
JPanelsendPanel=newSendPanel();
con.add(sendPanel,BorderLayout.SOUTH);
}
//聊天窗口的标题面板
classLabelPanelextendsJPanel
{
publicLabelPanel()
{
Fontfont=newFont("Dialog",Font.BOLD,18);
JLabellabel=newJLabel("欢迎使用小新新聊天服务器");
label.setFont(font);
this.add(label);
}
}
//聊天信息查看面板
//该面板内的区域为不可编辑区域
classContentPanelextendsJPanel
{
publicContentPanel()
{
FlowLayoutfl=newFlowLayout(FlowLayout.CENTER);
this.setLayout(fl);
mainArea.setLineWrap(true);
mainArea.setEditable(false);
JScrollPanescrollPanel=newJScrollPane(mainArea);
this.add(scrollPanel);
}
}
//填写发送信息的面板
classSendPanelextendsJPanel
{
publicSendPanel()
{
//面板的组件之间水平分隔15像素,垂直间距10像素
FlowLayoutlayout=newFlowLayout(FlowLayout.LEFT,15,10);
this.setLayout(layout);
sendArea.setLineWrap(true);
JScrollPanescrollPanel=newJScrollPane(sendArea);
this.add(scrollPanel);
JButtonsend=newJButton("发送");
this.add(send);
//对发送按钮注册动作监听器
send.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
Stringmsg=sendArea.getText();
if(!msg.equals(""))
{
mainArea.append("【服务器】:"+msg+"\n");
sendArea.setText("");
CreateServer.sendMsg(msg);
}
else
{
return;
}
}
});
}
}
}
//创建服务器ServerSocket的类
classCreateServerextendsThread
{
privateServerserver;

privatestaticBufferedReaderin=null;//存储客户端发送到服务器的数据
privatestaticPrintWriterout=null;//存储服务器发送到客户端的数据
privateSocketsocket=null;//等待客户端连接socket
privateServerSocketss=null;//开启服务器socket连接

//构造函数
publicCreateServer(Servers)
{
this.server=s;
try
{
ss=newServerSocket(2345);
System.out.println("服务器成功启动...!");
socket=ss.accept();//等待客户端请求
//获取输入到服务器的数据
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
//获取输出到客户端的数据
out=newPrintWriter(socket.getOutputStream(),true);
out.println("你好!");
}
catch(Exceptionr)
{
r.printStackTrace();
}
this.start();//启动线程
}
//实现信息发送到客户端的发送方法
publicstaticvoidsendMsg(Strings)
{
try
{
out.println("【服务器】:"+s+"\n");
}
catch(Exceptione)
{
System.out.println("发送信息失败...!!");
e.printStackTrace();
}
}
//线程Thread类的run方法实现对客户端发送来的数据监听
//线程启动后开始该方法,执行线程体
publicvoidrun()
{
Stringmsg="";
while(true)
{
try
{
msg=in.readLine();
//Thread.sleep(500);//线程睡眠
}
catch(SocketExceptionex)
{
ex.printStackTrace();
break;
}
catch(IOExceptionr)
{
r.printStackTrace();
break;
}
//若从客户端获取的信息不为空对象也不为空串
//则把信息显示在聊天信息文本域
if(msg!=null&&msg.trim()!="")
{
server.mainArea.append(msg+"\n");
}
}

}
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com