简单的聊天程序
//QQ聊天程序的建立网络流类
importjava.net.*;
importjava.io.*;
publicclassNeter{
privateBufferedReaderbr;
privatePrintWriterpw;
publicNeter(Socketsocket){
try{
InputStreamis=socket.getInputStream();
InputStreamReaderisr=newInputStreamReader(is);
br=newBufferedReader(isr);
OutputStreamos=socket.getOutputStream();
OutputStreamWriterosw=newOutputStreamWriter(os);
pw=newPrintWriter(osw,true);
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidsend(Stringmessage){
try{
pw.println(message);
}catch(Exceptione){
e.printStackTrace();
}
}
publicStringrecieve(){
Stringmessage="";
try{
message=br.readLine();
}catch(Exceptione){
e.printStackTrace();
}
returnmessage;
}
}
//QQ聊天程序的数据库验证类
importjava.sql.*;
importjava.io.*;
publicclassSQLer{
publicbooleanselect(Stringu,Stringp){
booleanb=false;
Connectioncon=null;
PreparedStatementps=null;
ResultSetrs=null;
try{
Filef=newFile("F:/java/SQL.ini");
FileReaderfr=newFileReader(f);
BufferedReaderbr=newBufferedReader(fr);
Stringdriver=br.readLine();
Stringurl=br.readLine();
Stringuser=br.readLine();
Stringpass=br.readLine();
Class.forName(driver);
con=DriverManager.getConnection(url,user,pass);
ps=con.prepareStatement("selectusername,passwordfromuserwhereusername=?andpassword=?");
ps.setString(1,u);
ps.setString(2,p);
rs=ps.executeQuery();
b=rs.next();
br.close();
rs.close();
ps.close();
con.close();
}catch(Exceptione){
e.printStackTrace();
}
finally{
try{
rs.close();
ps.close();
con.close();
}catch(Exceptione){
e.printStackTrace();
}
}
returnb;
}
}
//QQ聊天程序的文件读写类
importjava.io.*;
publicclassRecorder{
privateFilef;
publicRecorder(Stringurl){
try{
f=newFile(url);
if(!f.exists()){
f.createNewFile();
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidwrite(Stringmessage){
try{
FileWriterfw=newFileWriter(f,true);
PrintWriterpw=newPrintWriter(fw);
pw.println(message);
pw.close();
}catch(Exceptione){
e.printStackTrace();
}
}
publicStringread(){
Stringmessage="";
try{
FileReaderfr=newFileReader(f);
BufferedReaderbr=newBufferedReader(fr);
message+=br.readLine()+"\n";
}catch(Exceptione){
e.printStackTrace();
}
returnmessage;
}
}
服务器
//QQ聊天程序服务器代码
importjava.net.Socket;
importjava.net.ServerSocket;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.BufferedReader;
importjava.io.PrintWriter;
importjava.sql.DriverManager;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.io.File;
importjava.io.FileWriter;
importjava.util.*;
publicclassQQServer{
privateServerSocketserver;
privateSocketsocket;
privateNeternet;
privateHashMap<String,Neter>hm;
publicQQServer(){
createSocket();
}
publicvoidcreateSocket(){
try{
server=newServerSocket(8000);
hm=newHashMap<String,Neter>();
System.out.println("服务器已启动!");
while(true){
socket=server.accept();
net=newNeter(socket);
// MyServicems=newMyService(socket);
MyServicems=newMyService(net,hm);
Threadt=newThread(ms);
t.start();
System.out.println("客户端已连上!");
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
newQQServer();
}
}
classMyServiceimplementsRunnable{
// privateSocketsocket;
privateHashMap<String,Neter>hm;
privateNeternet;
// publicMyService(Socketsocket){
// this.socket=socket;
// }
publicMyService(Neternet,HashMap<String,Neter>hm){
this.net=net;
this.hm=hm;
}
@Override
publicvoidrun(){
createStream();
}
publicvoidcreateStream(){
try{
//输入流
// InputStreamis=socket.getInputStream();
// InputStreamReaderisr=newInputStreamReader(is);
// BufferedReaderbr=newBufferedReader(isr);
// //输出流
// OutputStreamos=socket.getOutputStream();
// OutputStreamWriterosw=newOutputStreamWriter(os);
// PrintWriterpw=newPrintWriter(osw,true);
while(true){
// str=br.readLine();
Stringstr=net.recieve();
Stringtype=str.split("%")[0];
Stringmess=str.split("%")[1];
if(type.equals("[login]")){
Stringuser=mess.split(":")[0];
Stringpass=mess.split(":")[1];
SQLersql=newSQLer();
if(sql.select(user,pass)){
net.send("[login]%OK");
for(Netern:hm.values()){
n.send("[add]%"+user);
}
for(Strings:hm.keySet()){
net.send("[add]%"+s);
}
hm.put(user,net);
}else{
net.send("[login]%ERR");
}
// Connectioncon=null;
// PreparedStatementps=null;
// ResultSetrs=null;
// try{
// Class.forName("org.gjt.mm.mysql.Driver");
// con=DriverManager.getConnection("jdbc:mysql://localhost:3306/qq","root","root");
// ps=con.prepareStatement("selectusername,passwordfromuserwhereusername=?andpassword=?");
// ps.setString(1,user);
// ps.setString(2,pass);
// rs=ps.executeQuery();
//
// if(rs.next()){
// pw.println("[LOGIN]:OK");
// }else{
// pw.println("[LOGIN]:NO");
// }
// rs.close();
// ps.close();
// con.close();
// }catch(Exceptione1){
// e1.printStackTrace();
// }
// finally{
// try{
// rs.close();
// ps.close();
// con.close();
// }catch(Exceptione1){
// e1.printStackTrace();
// }
// }
}elseif(type.equals("[chat]")){
Stringfrom=mess.split(":")[0];
Stringto=mess.split(":")[1];
Stringmessage=mess.split(":")[2];
Neterts=hm.get(to);
ts.send("[chat]%"+from+":"+message);
}elseif(type.equals("[exit]")){
for(Netern:hm.values()){
n.send("[exit]%"+mess);
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
界面:
//QQ聊天程序的登录界面及相关事件
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JLabel;
importjavax.swing.JButton;
importjavax.swing.JTextField;
importjavax.swing.JPasswordField;
importjavax.swing.JPanel;
importjava.awt.GridLayout;
importjava.awt.BorderLayout;
importjava.awt.FlowLayout;
importjava.awt.event.ActionListener;
importjava.awt.event.ActionEvent;
importjava.awt.event.WindowEvent;
importjava.awt.event.WindowListener;
importjava.io.File;
importjava.io.FileReader;
importjava.io.BufferedReader;
importjava.net.Socket;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.BufferedReader;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
publicclassQQLoginextendsJFrameimplementsActionListener,WindowListener{
privateJLabellabUser; //用户标签
privateJLabellabPass; //密码标签
privateJTextFieldtxtUser; //用户信息输入框
privateJPasswordFieldtxtPass; //用户密码输入框
privateJButtonbtnReg; //注册按钮
privateJButtonbtnLogin; //登录按钮
privateJButtonbtnCancel; //取消按钮
privateJPaneljpCenter; //中部布局
privateJPaneljpSouth; //南部布局
privateSocketsocket;
privateNeternet;
publicQQLogin(){
try{
socket=newSocket("localhost",8000);
net=newNeter(socket);
}catch(Exceptione){
e.printStackTrace();
}
init();
this.setSize(300,150);
this.setResizable(false);
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(500,200);
}
//界面布局
publicvoidinit(){
//用户标签和密码标签
labUser=newJLabel("用户");
labPass=newJLabel("密码");
//用户和密码输入框
txtUser=newJTextField();
txtPass=newJPasswordField();
//按钮
btnReg=newJButton("注册");
btnReg.addActionListener(this);
btnLogin=newJButton("登录");
btnLogin.addActionListener(this);
btnCancel=newJButton("取消");
btnCancel.addActionListener(this);
//中部布局
jpCenter=newJPanel();
jpCenter.setLayout(newGridLayout(2,2));
jpCenter.add(labUser);
jpCenter.add(txtUser);
jpCenter.add(labPass);
jpCenter.add(txtPass);
this.add(jpCenter,BorderLayout.CENTER);
//南部布局
jpSouth=newJPanel();
jpSouth.setLayout(newFlowLayout());
jpSouth.add(btnReg);
jpSouth.add(btnLogin);
jpSouth.add(btnCancel);
this.add(jpSouth,BorderLayout.SOUTH);
this.addWindowListener(this);
}
@Override
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand().equals("登录")){
try{
// OutputStreamos=socket.getOutputStream();
// OutputStreamWriterosw=newOutputStreamWriter(os);
// PrintWriterpw=newPrintWriter(osw,true);
//
// InputStreamis=socket.getInputStream();
// InputStreamReaderisr=newInputStreamReader(is);
// BufferedReaderbr=newBufferedReader(isr);
Stringuser=txtUser.getText();
Stringpass=newString(txtPass.getPassword());
if(!user.equals("")&&!pass.equals("")){
// pw.println("[LOGIN]:"+user+"%"+pass);
//
// Stringlogin=br.readLine();
net.send("[login]%"+user+":"+pass);
Stringlogin=net.recieve();
// System.out.println(login.split(":")[0]);
if(login.split("%")[0].equals("[login]")){
Stringstr=login.split("%")[1];
if(str.equals("OK")){
QQMainmain=newQQMain();
// main.setSocket(socket);
main.setNeter(net,user);
main.setVisible(true);
this.setVisible(false);
}else{
JOptionPane.showMessageDialog(this,"用户名或密码错误!");
}
}
}else{
JOptionPane.showMessageDialog(this,"密码或用户名为空!");
}
}catch(Exceptione1){
}
}
if(e.getActionCommand().equals("注册")){
QQRegr=newQQReg();
r.setVisible(true);
}
if(e.getActionCommand().equals("取消")){
txtUser.setText("");
txtPass.setText("");
}
}
publicStringgetUser(){
returntxtUser.getText();
}
publicStringgetPass(){
returnnewString(txtPass.getPassword());
}
publicstaticvoidmain(String[]args){
QQLoginlogin=newQQLogin();
login.setVisible(true);
}
@Override
publicvoidwindowOpened(WindowEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidwindowClosing(WindowEvente){
inti=JOptionPane.showConfirmDialog(this,"是否关闭?","QQlogin",JOptionPane.OK_CANCEL_OPTION);
if(i==JOptionPane.OK_OPTION){
System.exit(1);
}
}
@Override
publicvoidwindowClosed(WindowEvente){
}
@Override
publicvoidwindowIconified(WindowEvente){
}
@Override
publicvoidwindowDeiconified(WindowEvente){
}
@Override
publicvoidwindowActivated(WindowEvente){
}
@Override
publicvoidwindowDeactivated(WindowEvente){
}
}
//QQ聊天程序注册界面
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JButton;
importjavax.swing.JOptionPane;
importjavax.swing.JTextField;
importjavax.swing.JPasswordField;
importjavax.swing.JPanel;
importjava.awt.BorderLayout;
importjava.awt.GridLayout;
importjava.awt.event.ActionListener;
importjava.awt.event.ActionEvent;
importjava.io.File;
importjava.io.FileWriter;
importjava.io.PrintWriter;
importjava.sql.DriverManager;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
publicclassQQRegextendsJFrameimplementsActionListener{
JLabellabMess; //显示注册标签
JLabellabUser; //用户标签
JLabellabPass; //密码标签
JTextFieldtxtUser; //用户输入框
JPasswordFieldtxtPass; //密码输入框
JButtonbtnOK; //确认按钮
JButtonbtnCancel; //取消按钮
JPaneljpSouth;
JPaneljpCenter;
publicQQReg(){
init();
this.setBounds(500,200,300,150);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidinit(){
//实例化所有选项
labMess=newJLabel("注册信息");
labUser=newJLabel("用户");
labPass=newJLabel("密码");
txtUser=newJTextField();
txtPass=newJPasswordField();
btnOK=newJButton("确认");
btnOK.addActionListener(this);
btnCancel=newJButton("取消");
btnCancel.addActionListener(this);
jpSouth=newJPanel();
jpSouth.add(btnOK);
jpSouth.add(btnCancel);
jpCenter=newJPanel();
jpCenter.setLayout(newGridLayout(2,2));
jpCenter.add(labUser);
jpCenter.add(txtUser);
jpCenter.add(labPass);
jpCenter.add(txtPass);
this.add(labMess,BorderLayout.NORTH);
this.add(jpCenter,BorderLayout.CENTER);
this.add(jpSouth,BorderLayout.SOUTH);
}
@Override
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand()=="确认"){
Connectioncon=null;
PreparedStatementps=null;
Stringuser=txtUser.getText();
Stringpass=newString(txtPass.getPassword());
try{
Class.forName("org.gjt.mm.mysql.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/qq","root","root");
ps=con.prepareStatement("insertintouser(username,password)values(?,?)");
ps.setString(1,user);
ps.setString(2,pass);
ps.executeUpdate();
}catch(Exceptione1){
e1.printStackTrace();
}
}
if(e.getActionCommand()=="取消"){
txtUser.setText("");
txtPass.setText("");
}
}
// publicstaticvoidmain(String[]args){
// QQRegr=newQQReg();
// r.setVisible(true);
// }
}
//QQ聊天程序主界面类
importjavax.swing.JFrame;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowEvent;
importjava.awt.event.WindowListener;
importjavax.swing.JOptionPane;
importjavax.swing.JScrollPane;
importjavax.swing.JPanel;
importjavax.swing.JButton;
importjavax.swing.JTextArea;
importjavax.swing.JComboBox;
importjava.awt.GridLayout;
importjava.awt.BorderLayout;
importjava.awt.event.ActionListener;
importjava.io.File;
importjava.io.FileWriter;
importjava.io.PrintWriter;
importjava.net.Socket;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjavax.swing.JScrollPane;
publicclassQQMainextendsJFrameimplementsActionListener,Runnable,WindowListener{
privateJTextAreatxtSend; //发送信息的窗口
privateJScrollPanescrollSend;
privateJTextAreatxtMess; //显示信息的窗口
privateJScrollPanescrollMess;
privateJButtonbtnSend; //发送按钮去
privateJButtonbtnCancel; //取消按钮
privateJButtonbtnMess; //显示消息按钮
privateJComboBoxjbList; //显示聊天对象的下拉列表
privateJPaneljpSmall;
privateJPaneljpBig;
privateintscore=0;
privateQQChatchat;
// privateSocketsocket;
privateNeternet;
privateStringuser;
privateRecorderrecord;
publicQQMain(){
init();
chat=newQQChat();
this.setBounds(300,100,300,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
}
//界面布局按钮
publicvoidinit(){
txtSend=newJTextArea();
scrollSend=newJScrollPane(txtSend);
txtMess=newJTextArea();
scrollMess=newJScrollPane(txtMess);
txtMess.setEditable(false);
btnSend=newJButton("发送");
btnSend.addActionListener(this);
btnCancel=newJButton("取消");
btnMess=newJButton("聊天记录");
btnMess.addActionListener(this);
jbList=newJComboBox();
jpSmall=newJPanel();
jpSmall.add(jbList);
jpSmall.add(btnSend);
jpSmall.add(btnCancel);
jpSmall.add(btnMess);
jpBig=newJPanel();
jpBig.setLayout(newBorderLayout());
jpBig.add(jpSmall,BorderLayout.NORTH);
jpBig.add(scrollSend,BorderLayout.CENTER);
this.setLayout(newGridLayout(2,1));
this.add(scrollMess);
this.add(jpBig);
this.addWindowListener(this);
}
@Override
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand().equals("发送")){
try{
// OutputStreamos=socket.getOutputStream();
// OutputStreamWriterosw=newOutputStreamWriter(os);
// PrintWriterpw=newPrintWriter(osw,true);
Stringmess=txtSend.getText();
Stringto=jbList.getSelectedItem().toString();
if(!mess.equals("")){
// pw.println("[CHAT]:"+mess);
net.send("[chat]%"+user+":"+to+":"+mess);
txtSend.setText("");
}
// txtMess.append(mess+"\n");
// chat.getArea().append(mess+"\n");
}catch(Exceptione1){
e1.printStackTrace();
}
}
if(e.getActionCommand().equals("聊天记录")){
score++;
if(score%2==1){
chat.setVisible(true);
}else{
chat.setVisible(false);
}
}
}
// publicvoidwriteChat(){
// try{
// Filechat=newFile("F:/java/chat.txt");
//
// FileWriterfw=newFileWriter(chat,true);
// PrintWriterpw=newPrintWriter(fw);
//
// Strings=txtSend.getText();
// pw.println(s);
// pw.flush();
//
// }catch(Exceptione){
// e.printStackTrace();
// }
// }
//
publicvoidsetNeter(Neternet,Stringuser){
this.net=net;
this.user=user;
jbList.addItem(user);
this.setTitle(user);
record=newRecorder("F:/java/"+user+".txt");
chat.getArea().append(record.read());
Threadt=newThread(this);
t.start();
}
@Override
publicvoidrun(){
while(true){
Stringstr=net.recieve();
Stringtype=str.split("%")[0];
Stringmess=str.split("%")[1];
if(type.equals("[chat]")){
Stringfrom=mess.split(":")[0];
Stringmessage=mess.split(":")[1];
txtMess.append(from+"说:"+message+"\n");
record.write(from+"说:"+message+"\n");
chat.getArea().append(from+"说:"+message+"\n");
}elseif(type.equals("[add]")){
jbList.addItem(mess);
}elseif(type.equals("[exit]")){
txtMess.append(mess+"已退出\n");
}
}
}
publicstaticvoidmain(String[]args){
QQMainmain=newQQMain();
main.setVisible(true);
}
@Override
publicvoidwindowOpened(WindowEvente){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidwindowClosing(WindowEvente){
inti=JOptionPane.showConfirmDialog(this,"是否关闭?","QQchat",JOptionPane.OK_CANCEL_OPTION);
if(i==JOptionPane.OK_OPTION){
net.send("[exit]%"+user);
System.exit(1);
}else{
this.setVisible(true);
}
}
@Override
publicvoidwindowClosed(WindowEvente){
}
@Override
publicvoidwindowIconified(WindowEvente){
}
@Override
publicvoidwindowDeiconified(WindowEvente){
}
@Override
publicvoidwindowActivated(WindowEvente){
}
@Override
publicvoidwindowDeactivated(WindowEvente){
}
}
//QQ聊天程序聊天记录界面
importjavax.swing.JFrame;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjava.io.File;
importjava.io.FileReader;
importjava.io.BufferedReader;
publicclassQQChatextendsJFrame{
privateJTextAreaareaMess;
privateJScrollPanescrollMess;
publicQQChat(){
areaMess=newJTextArea();
scrollMess=newJScrollPane(areaMess);
areaMess.setEditable(false);
// chatFile();
this.add(scrollMess);
this.setResizable(false);
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(620,100,300,400);;
}
publicJTextAreagetArea(){
returnareaMess;
}
// publicvoidchatFile(){
// try{
// Filechat=newFile("F:/java/chat.txt");
// FileReaderfr=newFileReader(chat);
//
// BufferedReaderbr=newBufferedReader(fr);
//
// StringBuffers=newStringBuffer();
// while(br.ready()){
// s.append(br.readLine()+"\n");
// }
// areaMess.setText(s.toString());
// }catch(Exceptione){
// e.printStackTrace();
// }
// }
// publicstaticvoidmain(String[]args){
// QQChatchat=newQQChat();
// chat.setVisible(true);
// }
}
优质内容筛选与推荐>>