最终要求:
1.添加好友
2.与在线好友聊天
3.登录后可以显示与选中好友的聊天记录
解决方案:在数据库里建个表,然后储存 发信息者,收信息者,信息。
未完成:
用户端代码:
package qqmyclient;
//客户端代码
//1
import java.sql.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class SS
{
public static void main(String[]args)
{
new QQLogin();
}
}
class QQLogin
{
JLabel jl=new JLabel("用户名");
JLabel jl2=new JLabel("密码");
JTextField tf=new JTextField();
JPasswordField pf=new JPasswordField();
JButton jb=new JButton("登录");
JButton jb2=new JButton("注册");
JButton jb3=new JButton("取消");
JPanel up=new JPanel();
JPanel down=new JPanel();
JFrame jf=new JFrame();
Socket s=null;
public QQLogin()
{
up.setLayout(new GridLayout(2,2));
up.add(jl);
up.add(tf);
up.add(jl2);
up.add(pf);
down.setLayout(new FlowLayout());
down.add(jb);
down.add(jb2);
down.add(jb3);
jf.setSize(215, 125);
jf.setLayout(new BorderLayout());
jf.add(up,BorderLayout.NORTH);
jf.add(down, BorderLayout.SOUTH);
jf.setVisible(true);
try{
s=new Socket("10.36.12.121",8000);
jb.addActionListener(
new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
try{
String st=tf.getText();
String pass=new String(pf.getPassword());
OutputStream os=s.getOutputStream();
OutputStreamWriter sw=new OutputStreamWriter(os);
PrintWriter pw=new PrintWriter(sw,true);
pw.println(st+"%"+pass);
InputStream is=s.getInputStream();
InputStreamReader sr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(sr);
if(pass.equals(""))
{
JOptionPane.showMessageDialog(jf,"密码为空");
}
else if(br.readLine().equals("true"))
{
jf.setVisible(false);
QQMain qq=new QQMain();
qq.setSocket(s,st);
}
else
{
JOptionPane.showMessageDialog(jf, "用户名或密码错误");
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
class QQMain
{
JTextField tf=new JTextField();
JButton jb=new JButton("发送消息给:");
TextField tf1=new TextField();
JTextArea ta=new JTextArea();
JScrollPane sp=new JScrollPane(ta);
JPanel small=new JPanel();
JPanel big=new JPanel();
JFrame jf=new JFrame();
private Socket s;
String name=null;
public void setSocket(Socket w,String n)
{
s=w;
name=n;
}
public QQMain()
{
small.setLayout(new GridLayout(1,2));
small.add(jb);
small.add(tf1);
big.setLayout(new GridLayout(2,1));
big.add(tf);
big.add(small);
jf.setLayout(new BorderLayout());
jf.add(big,BorderLayout.NORTH);
jf.add(sp, BorderLayout.CENTER);
jf.setSize(300, 400);
jf.setVisible(true);
jb.addActionListener(
new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
if(tf.getText().equals(""))
{
JOptionPane.showMessageDialog(jf, "请输入接收者");
}
else
{
try{
OutputStream os=s.getOutputStream();
OutputStreamWriter sw=new OutputStreamWriter(os);
PrintWriter pw=new PrintWriter(sw,true);
pw.println(name+'%'+tf1.getText()+'%'+tf.getText());
ta.append(name+" 说: "+tf.getText()+"\r\n");
tf.setText("");
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
}
);
}
}
服务器端代码:
package mypro01;
import java.net.*;
import java.io.*;
import java.sql.*;
class qqServer
{
public static void main(String[]args)
{
try
{
ServerSocket ss=new ServerSocket(8000);
while(true)
{
Socket s=ss.accept();
MyClient my=new MyClient(s);
my.start();
}
}catch(Exception ex){
}
}
}
class MyClient extends Thread
{
private Socket s;
public MyClient(Socket w)
{
s=w;
}
public void run()
{
try{
while(true)
{
InputStream is=s.getInputStream();
InputStreamReader sr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(sr);
OutputStream os=s.getOutputStream();
OutputStreamWriter sw=new OutputStreamWriter(os);
PrintWriter pw=new PrintWriter(sw,true);
String st=br.readLine();
String name="";
String pass="";
int pos=0;
for(pos=0;;pos++)
{
if(st.charAt(pos)=='%')
break;
}
for(int i=0;i<st.length();++i)
{
if(i<pos)
name=name+st.charAt(i);
if(i>pos)
pass=pass+st.charAt(i);
}
if(pass.equals(""))
pw.println("empty");
else
{
try{
String password="fpy/.123698741";
Class.forName("org.gjt.mm.mysql.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/qq","root",password);
Statement sta=cn.createStatement();
name="'"+name+"'";
pass="'"+pass+"'";
ResultSet rs=sta.executeQuery("select * from user where username = "+name+" and password= "+pass+";");
if(rs.next())
{
pw.println("true");
InputStream is2=s.getInputStream();
InputStreamReader sr2=new InputStreamReader(is2);
BufferedReader br2=new BufferedReader(sr2);
String stri=br2.readLine();
String sender="'"+stri.split("%")[0]+"'";
String receiver="'"+stri.split("%")[1]+"'";
String infor="'"+stri.split("%")[2]+"'";
sta.execute("insert recorder values(sender,receiver,information)"+sender+","+receiver+","+infor+";");
}
else
{
pw.println("false");
}
}catch(Exception ex){}
}
}
}catch(Exception ex){}
}
}