使用Java套接字发送自定义对象

时间:2019-12-20 16:39:47

标签: java sockets serialization

我正在尝试通过java套接字从服务器向客户端发送自定义对象,但是服务器会阻止该对象的发送。 这是调试的事情,我实际上并不是要发送一个对象,而是要发送对象列表,甚至是cardList类也包含卡片列表。

自定义对象的类是card

import java.io.Serializable;

公共类卡实现可序列化的{

public int valeur ;
public String type;
public String imageSrc;

public Card (int valeur , String type , String imageSrc) {
    this.valeur=valeur;
    this.type=type;
    this.imageSrc=imageSrc;

}

}

对于服务器,我有ObjectStreamOutput

 private class ServerSideConnection implements Runnable {
       private Socket socket;
       private DataInputStream dataIn;
       private DataOutputStream dataOut;
       private ObjectInputStream objectIn;
       private ObjectOutputStream objectOut;
       private int playerID;
       private String playerName;

       public ServerSideConnection (Socket s,int id) {
           socket =s ;
           playerID=id;

           try {
               dataOut = new DataOutputStream(socket.getOutputStream());
               dataIn = new DataInputStream(socket.getInputStream());
               objectIn = new ObjectInputStream(socket.getInputStream());
               objectOut=new ObjectOutputStream(socket.getOutputStream());

           }catch (IOException ex) {
               System.out.println("IOExeption from SSC consturctor");
           }
       }

       public void run() {
           try {

               dataOut.writeInt(playerID);
               System.out.println(playerID);
               dataOut.flush();
               if(playerID==1) {
                   if(player2==null) 
                        return;
                   player1.playerName=dataIn.readUTF();


                    player2.SendPlayerName(player1.playerName);

                   System.out.println("nom"+ player1.playerName);
               }else{
                   player2.playerName=dataIn.readUTF();
                   player1.SendPlayerName(player2.playerName);
               }
               objectOut.writeObject(cardlist.cardList.get(0));
               objectOut.flush();
               System.out.println(cardlist.cardList.get(0).valeur);
              while(true) {

               }
           }catch (IOException ex) {
               System.out.println("IOException from run() SSC");
           }
       }

对于客户端,我有以下代码

private class ClientSideConnection {
       private Socket socket;
       private DataInputStream dataIn;
       private DataOutputStream dataOut;
       private ObjectInputStream objectIn;
       private ObjectOutputStream objectOut;
       public ClientSideConnection() {
           System.out.println("---------Client------------");
           try {
               socket = new Socket ("localhost",51734);            
               dataOut = new DataOutputStream(socket.getOutputStream());
               dataIn = new DataInputStream(socket.getInputStream());
               monjoueur.playerID=dataIn.readInt();
               System.out.println("monjoueur.playerID"+monjoueur.playerID);
               sendName();
               view.EnemyName.setText(dataIn.readUTF());
               try { 
                   cardList.cardList.add((Card)objectIn.readObject());
                   System.out.println((cardList.cardList.get(0).valeur));
                   } catch (ClassNotFoundException ex) {

                   }

               System.out.println("Connected to server as player #"+ monjoueur.playerID);

           }catch (IOException ex){
               System.out.println(" IO Exception form CSC contructor");
               ex.printStackTrace();
           }
       }

0 个答案:

没有答案