首页 > 解决方案 > Socket Net Exception - 我想与 mer 服务器同时接收对象和数组列表

问题描述

我想用 mer 服务器同时接收对象和数组列表。下面是来自发送方的代码。

我正在尝试传递信用卡号 - 我希望它在接收方服务器中得到验证,并将卡有效信息再次发送回发送方。我想使用同一个程序同时传递数组列表的对象,并且我想确保这不会妨碍这一点。

发件人:

try {
                        
    int portNo=3990;
    InetAddress serverAddress=InetAddress.getLocalHost();
    
    Socket socket=new Socket(serverAddress,portNo);
    
    ObjectOutputStream ObjectOS=new ObjectOutputStream(socket.getOutputStream());
    ObjectOS.writeObject(OrderedItem);
    ObjectOS.flush();
    
    
    DataOutputStream dout=new DataOutputStream(socket.getOutputStream());  
    dout.writeUTF(textFieldCreditCard.getText());  
    dout.flush();  
    dout.close();  
    
    
    DataInputStream dis=new DataInputStream(socket.getInputStream());  
    String  str=(String)dis.readUTF();  
    System.out.println("message= "+str);
    
    ObjectInputStream ObjectIS=new ObjectInputStream(socket.getInputStream());
    OrderedItem=(List<OrderedItem>)ObjectIS.readObject();
    
    ObjectOS.close();
    ObjectIS.close();
    socket.close();
    
}


catch(IOException|ClassNotFoundException ex) {
    
    ex.printStackTrace();
}

接收者:

编译器说错误在这一行:检查我在下面粘贴的错误:
ObjectOutputStream objectOS = new ObjectOutputStream(socket.getOutputStream());
但是,我想保留这一行,因为arraylist稍后我可能需要传递 Or 对象。

public class Server {
    
    public  static void main(String[] args)  {
        
        try {
            
            int portNo=3990;                
            ServerSocket serverSocket=new ServerSocket(portNo);             
            while(true) {
                
                Socket socket= serverSocket.accept();
                    
                ObjectInputStream ObjectIS= new ObjectInputStream(socket.getInputStream());
                
                List<OrderedItem> S=(List<OrderedItem>)ObjectIS.readObject();
                
                DataInputStream dis=new DataInputStream(socket.getInputStream());  
                String  str=(String)dis.readUTF();  
                System.out.println("Credit Card Number= "+str);  
                
                if(str.length()==14) {
                        
                    DataOutputStream send=new DataOutputStream(socket.getOutputStream());  
                    send.writeUTF("Card Valid");  
                    
                }
                else {

                    DataOutputStream send=new DataOutputStream(socket.getOutputStream());  
                    send.writeUTF("Card Invalid. Card Number must be 14 Digits");  
    
                                    }

            for(OrderedItem s:S)
            System.out.println(s.getSubTotalAmount());
    
    ObjectOutputStream objectOS = new ObjectOutputStream(socket.getOutputStream());

            }

        }
        catch(IOException|ClassNotFoundException ex){
            
            ex.printStackTrace();
            
        }

    }
}
    
    
    
    

错误:

java.net.SocketException: Software caused connection abort: socket write error
    at java.base/java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)
    at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
    at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1883)
    at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1792)
    at java.base/java.io.ObjectOutputStream.<init>(ObjectOutputStream.java:248)
    at Server.main(Server.java:68)
        

    
    
    
    
    

标签: javasocketsserverclientserversocket

解决方案


推荐阅读