硬盘挂掉,只剩下客户端代码......
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class ChatClientFrame extends JFrame{
static String num = "";
static String nickname = "";
static String password = "";
static String ID = "";
JPanel panel1 = new JPanel(new GridLayout(2,2));
JPanel panel2 = new JPanel();
JTextField text = new JTextField(15);
JPasswordField passwordField = new JPasswordField(15);
JLabel label1 = new JLabel("请输入帐号");
JLabel label2 = new JLabel("请输入密码");
JButton button1 = new JButton("登录");
JButton button2 = new JButton("注册");
final Connect con = new Connect();
public ChatClientFrame(){
setTitle("登录");
setSize(200,125);
setLocation(500,400);
panel1.add(label1);
panel1.add(text);
panel1.add(label2);
panel1.add(passwordField);
panel2.add(button1);
panel2.add(button2);
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Register frame = new Register();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
}
});
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
num = text.getText();
password = new String(passwordField.getPassword());
if(num.equals("")||password.equals("")){
JOptionPane.showMessageDialog(null,"请输入完整的登录信息!","信息",JOptionPane.INFORMATION_MESSAGE);
}
else{
String serverInfo = con.loggin(num,password);
if(serverInfo.equals("OK")){
ID=num;
dispose();
System.out.println("loggin successed");
ClientFrame clientFrame = new ClientFrame();
clientFrame.setVisible(true);
clientFrame.setResizable(false);
clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
else if(serverInfo.equals("ERROR")){
JOptionPane.showMessageDialog(null,"用户名或密码错误!","错误",JOptionPane.INFORMATION_MESSAGE);
}
}
}
});
add(panel1,BorderLayout.NORTH);
add(panel2,BorderLayout.SOUTH);
}
class Register extends JFrame{
// final Connect con = new Connect();
JPanel panel1 = new JPanel(new GridLayout(4,2));
JPanel panel2 = new JPanel();
JTextField text1 = new JTextField(15);
JTextField text2 = new JTextField(15);
JPasswordField password1 = new JPasswordField(15);
JPasswordField password2 = new JPasswordField(15);
JLabel label1 = new JLabel("请输入帐号");
JLabel label4 = new JLabel("请输入昵称");
JLabel label2 = new JLabel("请输入密码");
JLabel label3 = new JLabel("确认密码");
JButton button1 = new JButton("注册");
JButton button2 = new JButton("取消");
public Register(){
setTitle("注册");
setSize(250,150);
setLocation(475,400);
panel1.add(label1);
panel1.add(text1);
panel1.add(label4);
panel1.add(text2);
panel1.add(label2);
panel1.add(password1);
panel1.add(label3);
panel1.add(password2);
panel2.add(button1);
panel2.add(button2);
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String s1 = new String(password1.getPassword());
String s2 = new String(password2.getPassword());
if(text1.getText().equals("")||text1.getText().equals("")||s1.equals("")){
JOptionPane.showMessageDialog(null,"请输入完整的注册信息!","信息",JOptionPane.INFORMATION_MESSAGE);
}
else if(!(s1.equals(s2))){
JOptionPane.showMessageDialog(null,"密码不匹配,请重新输入!","错误",JOptionPane.ERROR_MESSAGE);
}
else{
num = text1.getText();
nickname = text2.getText();
password = s1;
String serverInfo = con.register(num,nickname,password);
if(serverInfo.equals("OK")){
JOptionPane.showMessageDialog(null,"注册成功!","信息",JOptionPane.INFORMATION_MESSAGE);
dispose();
}
else if(serverInfo.equals("ID_error")){
JOptionPane.showMessageDialog(null,"该用户名已被注册,请选择其他用户名!","信息",JOptionPane.INFORMATION_MESSAGE);
}
System.out.println(num+nickname+password);
}
}
});
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dispose();
}
});
add(panel1,BorderLayout.CENTER);
add(panel2,BorderLayout.SOUTH);
}
}
class ClientFrame extends JFrame{
JList friendList;
JLabel label = new JLabel("好友列表");
JPanel panel1 = new JPanel(new BorderLayout());
JPanel panel2 = new JPanel(new GridLayout(2,2));
JButton button1 = new JButton("添加好友");
JButton button2 = new JButton("删除好友");
JButton button3 = new JButton("与他聊天");
String remoteIP ="";
int localChatPort = 8001;
boolean isChatting = false;
/* public Loggin(String num,String password){
new Client().connect(num,password);
}
*/
public ClientFrame(){
DefaultListModel model = new DefaultListModel();
setTitle("HH 2008");
setSize(200,400);
friendList = new JList(model);
friendList.setFixedCellHeight(35);
friendList.setFixedCellWidth(15);
panel1.add(label,BorderLayout.NORTH);
panel1.add(friendList,BorderLayout.CENTER);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String friendID = JOptionPane.showInputDialog("请输入好友号码");
if(friendID!=null)
con.addFriend(friendID);
}
});
button3.addActionListener(new ChatAction());
add(panel1,BorderLayout.CENTER);
add(panel2,BorderLayout.SOUTH);
Thread t = new Thread(new ReceiveThread(localChatPort));
t.start();
}
class ChatAction extends AbstractAction {
public void actionPerformed(ActionEvent e){
System.out.println("chat "+remoteIP);
remoteIP = con.chat("13131");
System.out.println("chat "+remoteIP);
if(remoteIP.equals("friend_off_line")){
JOptionPane.showMessageDialog(null,"该好友目前不在线,不能收到您的消息!","信息",JOptionPane.INFORMATION_MESSAGE);
}
else if(remoteIP.equals("ERROR")){
JOptionPane.showMessageDialog(null,"发生IO错误!","信息",JOptionPane.INFORMATION_MESSAGE);
}
else{
Thread t = new Thread(new ChatThread(remoteIP));
t.start();
isChatting = true;
}
}
}
class ReceiveThread implements Runnable{
private int port;
private DatagramSocket socket;
public ReceiveThread(int port){
this.port = port;
try{
socket = new DatagramSocket(port);
}catch(IOException e){
e.printStackTrace();
}
}
public void run(){
while(true){
try{
DatagramPacket inPacket = new DatagramPacket(new byte[512],512);
socket.receive(inPacket);
String msg = new String(inPacket.getData(),0,inPacket.getLength());
if(isChatting){
}
else{
JOptionPane.showMessageDialog(null,"您收到新的的消息!/n"+msg,"信息",JOptionPane.INFORMATION_MESSAGE);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
class ChatThread implements Runnable{
String ip = null;
public ChatThread(String ip){
this.ip=ip;
}
public void run(){
ChatFrame chat= new ChatFrame();
chat.setVisible(true);
chat.pack();
}
}
class ChatFrame extends JFrame{
JTextArea message= new JTextArea(15,35);
JTextArea sendArea = new JTextArea(10,15);
JMenuBar menubar = new JMenuBar();
JMenu operMenu = new JMenu("开始");
JPanel panel = new JPanel();
JButton sendButton = new JButton("发送");
JMenuItem connectItem = new JMenuItem("连接");
JMenuItem disConnectItem = new JMenuItem("断开连接");
public ChatFrame(){
setTitle("Chatting");
operMenu.add(connectItem);
operMenu.add(disConnectItem);
menubar.add(operMenu);
setJMenuBar(menubar);
message.setLineWrap(true);
sendArea.setLineWrap(true);
panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
panel.add(sendButton);
add(new JScrollPane(message),BorderLayout.NORTH);
add(new JScrollPane(sendArea),BorderLayout.CENTER);
add(panel,BorderLayout.SOUTH);
Thread t = new Thread(new SendThread(remoteIP));
t.start();
/* connectItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
ConnectFrame connectFrame = new ConnectFrame();
connectFrame.setSize(200,110);
connectFrame.setVisible(true);
connectFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
});*/
}
public void setSendArea(String msg){
sendArea.append(msg);
}
class SendThread implements Runnable,ActionListener{
private InetAddress remoteIP;
private int remotePort = 8001;
private DatagramSocket socket;
public SendThread(String remoteIP){
// this.remotePort = remotePort;
try{
this.remoteIP = InetAddress.getByName(remoteIP);
socket = new DatagramSocket();
}catch(IOException e){
e.printStackTrace();
}
}
public void run(){
sendButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
try{
BufferedReader localReader = new BufferedReader(new StringReader(sendArea.getText()));
String msg = null;
while((msg = localReader.readLine())!=null){
byte[] output = msg.getBytes();
DatagramPacket outPacket = new DatagramPacket(output,output.length,remoteIP,remotePort);
socket.send(outPacket);
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
}
}
}
}
class Connect {
private String host = "192.168.18.5";
private int port = 8000;
private Socket socket;
private boolean state = true;
String infoString = "";
String logginInfo = "";
// boolean state = true;
public Connect(){
try{
socket = new Socket(host,port);
}catch(IOException e){
infoString+="连接服务器出错!/n";
}
}
public BufferedReader getReader(Socket socket) throws IOException {
return new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public PrintWriter getWriter(Socket socket) throws IOException {
return new PrintWriter(socket.getOutputStream(),true);
}
public String register(String ID,String nickname,String password){
String str = "";
try{
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
pw.println("register");
pw.println(ID);
pw.println(nickname);
pw.println(password);
str = br.readLine();
}catch(IOException e){
infoString+="出现IO错误!/n";
}
return str;
}
public String loggin(String num,String password){
String serverInfo = "";
try{
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
pw.println("loggin_check");
pw.println(num);
pw.println(password);
serverInfo=(br.readLine());
}catch(IOException e){
infoString+="连接服务器出现IO错误!/n";
}
return serverInfo;
}
public void addFriend(String friendID){
String serverInfo = null;
try{
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
pw.println("addfriend");
pw.println(friendID);
pw.println(ChatClientFrame.ID);
System.out.println(ChatClientFrame.ID);
if((serverInfo=br.readLine()).equals("add_friend_success"))
JOptionPane.showMessageDialog(null,"添加好友成功!","信息",JOptionPane.INFORMATION_MESSAGE);
else if(serverInfo.equals("friend_offline"))
JOptionPane.showMessageDialog(null,"该用户目前不在线!","信息",JOptionPane.INFORMATION_MESSAGE);
else if(serverInfo.equals("friend_not_exit"))
JOptionPane.showMessageDialog(null,"该用户不存在!","信息",JOptionPane.INFORMATION_MESSAGE);
}catch(IOException e){
infoString+="出现IO错误!/n";
}
}
public String chat(String friendID){
String serverInfo = null;
String friendIP="ERROR";
try{
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
pw.println("chat");
pw.println(friendID);
if((serverInfo=br.readLine()).equals("OK")){
friendIP=br.readLine();
System.out.println(friendID);
}
else if(serverInfo.equals("friend_off_line")){
friendIP = serverInfo;
}
}catch(IOException e){
infoString+="出现IO错误!/n";
}
return friendIP;
}
public void offline(){
try{
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
pw.println("offline");
}catch(IOException e){
infoString+="连接出现IO错误!/n";
}
}
}
public class ChatClient{
public static void main(String[] args){
ChatClientFrame frame = new ChatClientFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
}
}