java - 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)
解决方案
推荐阅读
- rascal - Get the name of a class and method as a string
- c++ - C++ Vector subtraction
- reactjs - Testing component with lodash.debounce delay failing
- python - How to solve float() argument must be a string or a number, not Image () / not 'jpegimagefile' keras?
- javascript - 单击 HTML 按钮时尝试播放声音
- html - How to efficiently remove user-agent stylings applied to my anchor tags
- installation - 无法更新 PATH 以适应 Homebrew 命令
- postman - 更改 PostMan 中的响应
- c - C中的快速双exp2函数
- swiftui - SwiftUI - 如何传递数据然后初始化和编辑数据