本地服务器客户端通信

瑟荻 发布于 2013/05/14 14:39
阅读 65
收藏 0
登录
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class Login extends JFrame
{
    private JLabel Jname=new JLabel("输入姓名");
    private JLabel Jpass=new JLabel("输入密码");
    private JTextField Tname=new JTextField();
    private JTextField Tpass=new JTextField();
    private JButton Submit=new JButton("确定");
    private Socket server=null;
    private PrintWriter p=null;
    private BufferedReader b=null;
    
    public static void main(String args[])
    {
        Login login=new Login();
    }
    
    public Login()
    {
        this.setTitle("登录");
        init();
        this.setLocation(100, 100);
        this.setSize(300, 300);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public void init()
    {
        this.setLayout(new GridLayout(3,2));
        this.add(Jname);
        this.add(Tname);
        this.add(Jpass);
        this.add(Tpass);
        Submit.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) 
            {
                if(Tname.getText().equals("")||Tname.getText()==null||Tname.getText().trim().equals("")){
                    JOptionPane.showMessageDialog(null, "用户名不能为空");
                    Tname.requestFocus();
                }
                else if(Tpass.getText().equals("")||Tpass.getText()==null||Tpass.getText().trim().equals("")){
                    JOptionPane.showMessageDialog(null, "密码不能为空");
                    Tpass.requestFocus();
                }
                else
                {
                     getConnection();
                }
            }        
        });
        this.add(Submit);
    }
    public void getConnection()
    {
         try {
                open(10000);
                p.println(Tname.getText());
                p.flush();
                p.println(Tpass.getText());
                p.flush();
                String str=b.readLine();
                this.close();
                if(!str.equals("connect refused"))
                {
                    int port=Integer.parseInt(str);
                    JOptionPane.showMessageDialog(null, "即将转到"+port+" 端口通信");
                    System.out.println("连接到新端口"+port);
                    super.setVisible(false);
                    Client c=new Client(port);
                    Thread t=new Thread(c);
                    t.start();
                }
                else
                {
                    JOptionPane.showMessageDialog(null, "连接失败");
                }
        } 
        catch (Exception ex) 
        {
                 System.out.println(ex.getMessage());
         } 
    }
    public void open(int port)
    {
        try {
            server = new Socket("localhost",port);
            p=new PrintWriter(new OutputStreamWriter(server.getOutputStream()));
            b=new BufferedReader(new InputStreamReader(server.getInputStream()));
            } 
        catch (Exception ex) 
        {
            System.out.println(ex.getMessage());
        }                    
    }
    public void close() throws IOException
    {
        p.close();
        b.close();
        server.close();
    }
   

}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import java.net.UnknownHostException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.sql.*;
import javax.swing.*;
public class Server extends JFrame implements Runnable
{
    private ServerSocket server=null;
    private Socket client=null;
    private JLabel l1=new JLabel("明文");
    private JLabel l2=new JLabel("密文");
    private JTextField T=new JTextField(20);
    private JTextArea TA1=new JTextArea();//显示明文
    private JTextArea TA2=new JTextArea();//显示密文
    private JButton B=new JButton("发送");//发送信息
    private JPanel p1=new JPanel();
    private PrintWriter pp=null;
    private BufferedReader bb=null;
    private JPanel p2=new JPanel();
    private String message=null;
    private JScrollPane JS1=new JScrollPane(TA1);
    private JScrollPane JS2=new JScrollPane(TA2);
    private String kk=null;
    private Key key;
    
    public static void main(String args[]) throws UnknownHostException, IOException, NoSuchAlgorithmException
    {
       Server s=new Server();
       Thread t=new Thread(s);
       t.start();
    }
    public Server() throws UnknownHostException, IOException, NoSuchAlgorithmException
    {
        this.setTitle("服务器端");
        this.setLocation(200, 200);
        this.setSize(300, 300);
        this.init();
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public void init()
    {
           this.setLayout(new BorderLayout(3,3));
           this.setBackground(Color.red);
           p1.setLayout(new GridLayout(2,1));
           JS2.setBorder(BorderFactory.createTitledBorder("密文区"));
           p1.add(JS2);
           JS1.setBorder(BorderFactory.createTitledBorder("明文区"));
           p1.add(JS1);
           this.add(p1,"Center");
           p2.setLayout(new GridLayout(1,2));
           p2.add(T);
           B.addActionListener(new ActionListener()
           {
               public void actionPerformed(ActionEvent e) 
               {
                    if(T.getText().trim().equals("")||T.getText().trim()==null){
                         JOptionPane.showMessageDialog(null, "不能为空!");
                         T.requestFocus();
                    }
                    else{
                        pp.println(Cry.enCry(T.getText(),key));
                        pp.flush();
                        TA1.append("Server:"+T.getText()+"\n");
                        TA2.append("Server:"+Cry.enCry(T.getText(),key)+"\n");
                        T.setText("");
                    }
               }
           });
           p2.add(B);
           this.add(p2,"South");
    }


    private void getConnection()
    {
        try 
        {       
            server=new ServerSocket(10000);
            //server.setSoTimeout(2000);
           // System.out.println("is is successful?");
            while(true)
            {
            client=server.accept();
            pp=new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
            bb=new BufferedReader(new InputStreamReader(client.getInputStream()));      
            String name=bb.readLine();
            String password=bb.readLine();
            System.out.println(name+"  "+password);
            if(check(name,password)){
                pp.println(20000);
                pp.flush();
                this.close();
                open(20000);               
                communicate();
                this.close();
            }
            else{
                pp.println("connect refused");
                pp.flush();
            }
            }
           } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }
    public void open(int port) throws IOException
    {
        server=new ServerSocket(port);
        System.out.println(port+"等待连接……");
        client=server.accept();
        System.out.println(port+"连接成功");
        pp=new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
        bb=new BufferedReader(new InputStreamReader(client.getInputStream()));
    }
    private void close() throws IOException{
           pp.close();
           bb.close();
           client.close();
           server.close();
           System.out.println("关闭成功!");
    }


    private void communicate() throws IOException{
          do{
              message=bb.readLine();
              TA1.append("Client:"+Cry.deCry(message, key)+"\n");
              TA2.append("Client:"+message+"\n");
          } while(!message.equals("bye"));
    }
        public boolean check(String name,String password) throws SQLException
        {
        String driverName="org.gjt.mm.mysql.Driver";
        String dbURL = "jdbc:mysql://localhost/test";
        String userName = "root";
        String userPwd = "123";
        Connection con=null;
        try {
        Class.forName(driverName);
        System.out.print("you have connnected successfully!");
        con=DriverManager.getConnection(dbURL, userName, userPwd);
        PreparedStatement st=con.prepareStatement("select *from uu where name='"+name+"' and password='"+password+"'");
        ResultSet rs=st.executeQuery();
        System.out.println("数据库连接成功!");
        if(rs.next())
        {
            kk=rs.getString("secrit");
            key=Cry.getKey(kk);
            con.close();
           return true;
        }
      }
       catch (Exception e) 
       {
                 con.close();
                 e.printStackTrace();
       }
         con.close();
         return false;
    }
    public void run() 
    {
       getConnection();
    }
    
}

 
 
 

 

 
 
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.*; import java.net.Socket; import java.net.UnknownHostException; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.*; import javax.swing.border.Border; /**  *  * @author Administrator  */ public class Client extends JFrame implements Runnable {     private Socket server=null;     private JLabel l1=new JLabel("明文");     private JLabel l2=new JLabel("密文");     private JTextField T=new JTextField(20);     private JTextArea TA1=new JTextArea();//显示明文     private JTextArea TA2=new JTextArea();//显示密文     private JButton B=new JButton("发送");//发送信息     private JPanel p1=new JPanel();     private PrintWriter pp=null;     private BufferedReader bb=null;     private JPanel p2=new JPanel();     private String message=null;     private JScrollPane JS1=new JScrollPane(TA1);     private JScrollPane JS2=new JScrollPane(TA2);     private Key key=Cry.getKey("123456");     int port;     public Client(int port) throws UnknownHostException, IOException, NoSuchAlgorithmException     {         this.setTitle("客户端");         this.setLocation(200, 200);         this.setSize(300, 300);         init();         this.port=port;         this.setVisible(true);         this.setDefaultCloseOperation(EXIT_ON_CLOSE);     }     public void init()     {            this.setLayout(new BorderLayout(3,3));            this.setBackground(Color.red);            p1.setLayout(new GridLayout(2,1));            JS2.setBorder(BorderFactory.createTitledBorder("密文区"));                      p1.add(JS2);            JS1.setBorder(BorderFactory.createTitledBorder("明文区"));                      p1.add(JS1);            this.add(p1,"Center");            p2.setLayout(new GridLayout(1,2));            p2.add(T);            B.addActionListener(new ActionListener()            {                public void actionPerformed(ActionEvent e)                 {                     if(T.getText().trim().equals("")||T.getText().trim()==null)                     {                          JOptionPane.showMessageDialog(null, "不能为空!");                          T.requestFocus();                     }                     else{                         pp.println(Cry.enCry(T.getText(),key));                         pp.flush();                         TA1.append("Client:"+T.getText()+"\n");                         TA2.append("Client:"+Cry.enCry(T.getText(),key)+"\n");                         T.setText("");                     }                }            });            p2.add(B);            this.add(p2,"South");     }        private void getConnection(int port) {         try {             server = new Socket("localhost",port);             pp=new PrintWriter(new OutputStreamWriter(server.getOutputStream()));             bb=new BufferedReader(new InputStreamReader(server.getInputStream()));             System.out.println("OOK");             communicate();             this.close();         } catch (Exception ex) {             JOptionPane.showMessageDialog(null, ex.getMessage());         }     }     private void close() throws IOException{            pp.close();            bb.close();            server.close();     }     private void communicate() throws IOException{           do{             try {                 message = bb.readLine();                 TA1.append("Server:"+Cry.deCry(message, key)+"\n");                 TA2.append("Server:"+message+"\n");             } catch (IOException ex)              {               }              } while(!message.equals("bye"));             }     public void run()      {             getConnection(port);    } }

以下是问题补充:

@瑟荻:登录会出现Connection refused:connection null这句话 (2013/05/14 14:40)
加载中
返回顶部
顶部