У меня есть JTable в моей форме SERVER, она заполняется из базы данных 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-соединения, SERVER SIDE:
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 на стороне клиента, im не уверен, что это правильный подход к нему, но мое назначение состоит в том, что сервер будет считывать данные 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 и может предоставлять данные в формате json, xml.
Клиент может использовать любое из множества доступных http-клиентов для получения данных с сервера. Эти библиотеки позаботились о многих проблемах сокетов.