簡體   English   中英

通過套接字將JTable數據從服務器發送到客戶端JTable

[英]Sending JTable data from Server to Client JTable through sockets

我在SERVER表單上有一個JTable,它是從MySQL數據庫填充的,並以構造函數編碼:

String sql = "SELECT * from fiekorari";
        try{
        pst=conn.prepareStatement(sql);
        res=pst.executeQuery();
        table.setModel(DbUtils.resultSetToTableModel(res));
        pst.close();
        res.close();
        } catch (SQLException e1){
            e1.printStackTrace();
        }

使用TCP連接(服務器端)在主服務器上建立連接:

public class Serveri extends JFrame {

    private JPanel contentPane;
    static ServerSocket ss;
    static Socket s;
    static DataInputStream din;
    static DataOutputStream dout;
    private JTextField txtMesazhi;
    private static JTextArea txtA;
    static Connection conn=null;
    static ResultSet res= null;
    static PreparedStatement pst = null;
    private Object id;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Serveri frame = new Serveri();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        SqlConn.getConnection();
        String msgin="";
        try 
        {
            ss=new ServerSocket(1201);
            s=ss.accept();
            din=new DataInputStream(s.getInputStream());
            dout=new DataOutputStream(s.getOutputStream()); //code continues with chat programming

我想將數據從服務器端的JTable發送到客戶端的JTable,我不確定這是否是正確的方法,但是我的任務是讓服務器讀取DB數據並將其發送給客戶端。

下面是客戶端的代碼,該代碼通過TCP建立聊天連接,但是現在不得不添加一個表,該表通過套接字從Servers表中讀取數據:

public class Klienti extends JFrame {

    private JPanel contentPane;
    private JTextField txtMesazhi;
    private static JTextArea txtShfaq1;
    static Socket s;
    static DataInputStream din;
    static DataOutputStream dout;
    private JButton btnNewButton;
    public static String sql1;
    private JTable table;
    private JTextField txtEmri;
    private JTextField txtMbiemri;
    private JTextField txtOra;
    static Connection conn=null;
    static ResultSet res= null;
    static PreparedStatement pst = null;
     private Pattern pattern;
     private Matcher matcher;
     private String loc;



    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Klienti frame = new Klienti();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        //SqlConn.getConnection();
        try 
        {
            s=new Socket("localhost",1201);
            din=new DataInputStream(s.getInputStream());
            dout=new DataOutputStream(s.getOutputStream());

//code in constructor Client side which sends text message to Server through sockets: 

dout.writeUTF(msgout);
            txtShfaq1.setText(txtShfaq1.getText().trim()+"\nJu:\t"+msgout);
            txt.setText("");

不,您不應該將JTable從服務器發送到客戶端。 實際上,服務器不應包含任何擺動組件。 它僅應請求獲取數據,並僅發送適當格式的數據,而不包裝在JTable中。

還有一點,盡量不要做普通的套接字通訊。 使用更高級別的協議,例如HTTP。 服務器可以運行http Web服務,並可以json,xml格式提供數據。

客戶端可以使用許多可用的http客戶端中的任何一個來從服務器獲取數據。 這些庫解決了許多套接字連接問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM