【发布时间】:2016-02-24 16:51:05
【问题描述】:
我实现了一个允许服务器和客户端之间通信的代码。我从服务器发送了一个ArrayList<Object> 并且客户端收到了它。
问题是当我尝试在客户端中打印我的列表时,因为我想验证它是否没有损坏。其实程序launchClassCastException.
这是我在服务器端使用的代码:
public class Server {
public final static int PORT = 6543;
ServerSocket ss = null;
Socket s = null;
DataInputStream in;
DataOutputStream out;
ObjectInputStream objIn;
ObjectOutputStream objOut;
Connection conn;
protected final static String DRIVER = "com.mysql.jdbc.Driver";
protected final static String SERVERURL = "jdbc:mysql://localhost:3306/datazanzariere?zeroDateTimeBehavior=convertToNull";
protected final static String USER = "root";
protected final static String PASSWORD = "admin";
public Socket waitObj(){
try {
System.out.println("inizializzo il server");
ss = new ServerSocket(PORT);
System.out.println("server pronto in ascolto");
s = ss.accept();
System.out.println("connessione stabilita");
objOut = new ObjectOutputStream(s.getOutputStream());
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
return s;
}
public void sendList() {
List<PersonaFisica> pfList = new ArrayList<PersonaFisica>();
PersonaFisica pf = new PersonaFisica();
int i=0;
try{
Class.forName(DRIVER);
conn = DriverManager.getConnection(SERVERURL, USER, PASSWORD);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM personafisica");
while(rs.next()) {
pf.setClienteF(rs.getInt("ClienteF"));
pf.setCodFiscale(rs.getString("CodFiscale"));
pf.setNome(rs.getString("Nome"));
pf.setCognome(rs.getString("Cognome"));
pfList.add(pf);
System.out.println(pfList.get(i).getClienteF() + " " + pfList.get(i).getCodFiscale()+ " " + pfList.get(i).getNome()+ " " + pfList.get(i).getCognome());
i++;
}
objOut.writeObject(pfList);
objOut.close();
s.close();
ss.close();
}catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
}
这是客户端的代码:
public class Client {
private final static int PORT = 6543;
Socket s = null;
DataInputStream in;
DataOutputStream out;
ObjectOutputStream outObj;
ObjectInputStream inObj;
private List<PersonaFisica> pfList = new ArrayList<PersonaFisica>();
public Socket connectObj(){
try {
System.out.println("Provo a connettermi al server....");
s = new Socket("192.168.0.7",PORT);
System.out.println("Connesso.");
inObj = new ObjectInputStream(s.getInputStream());
//outObj = new ObjectOutputStream(s.getOutputStream());
} catch (IOException ex) {
System.out.println("Non posso connettermi.");
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
return s;
}
public void receiveList(){
try {
System.out.println("Dentro prova prima del flusso");
pfList = (ArrayList<PersonaFisica>)inObj.readObject();
System.out.println("Dentro prova dopo il flusso");
inObj.close();
s.close();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Dentro prova fuori catch");
System.out.println(pfList);
}
public void printList(){
for(int i = 0; i < pfList.size(); i++){
System.out.println(pfList.get(i).getClienteF() + " " +pfList.get(i).getCodFiscale() + " " +pfList.get(i).getNome() + " " +pfList.get(i).getCognome());
}
}}
我已经将包含PersonaFisicaclass 的包从服务器导入到客户端。有解决方案还是我必须改变方法?
【问题讨论】:
-
你的班级
PersonaFisica是否实现了接口Serializable? -
是的,我贴出代码
标签: java object arraylist socket.io client