Java 尝试从服务器(TCP)获取ObjectInputStream以反序列化对象
我基本上想从服务器向我的客户机发送一个arraylist,它必须被序列化,所以我使用ObjectI/OStream。但这是第一次创建客户机/服务器程序,所以我真的不知道怎么做。我甚至不能在客户端程序中构造ObjectInputStream构造函数。我得到一个错误: 线程“main”java.net.SocketException中的异常:对等方重置连接:套接字写入错误 位于java.net.SocketOutputStream.socketWrite0(本机方法) 位于java.net.SocketOutputStream.socketWrite(未知源) 位于java.net.SocketOutputStream.write(未知源) 位于java.io.ObjectOutputStream$BlockDataOutputStream.drain(未知源) 位于java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(未知源) 位于java.io.ObjectOutputStream。(未知源) 位于SalesServer.main(SalesServer.java:35) 代码:Java 尝试从服务器(TCP)获取ObjectInputStream以反序列化对象,java,serialization,tcp,client-server,deserialization,Java,Serialization,Tcp,Client Server,Deserialization,我基本上想从服务器向我的客户机发送一个arraylist,它必须被序列化,所以我使用ObjectI/OStream。但这是第一次创建客户机/服务器程序,所以我真的不知道怎么做。我甚至不能在客户端程序中构造ObjectInputStream构造函数。我得到一个错误: 线程“main”java.net.SocketException中的异常:对等方重置连接:套接字写入错误 位于java.net.SocketOutputStream.socketWrite0(本机方法) 位于java.net.Sock
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class SalesClient {
public static void main(String[] args) throws IOException{
Socket ssocket = null;
ObjectOutputStream out = null;
ObjectInputStream inp = null;
Scanner in = null;
try {
ssocket = new Socket("FahadAhmed-PC", 6667);
in = new Scanner(System.in);
inp = new ObjectInputStream();
}catch(UnknownHostException e) {
System.err.println("Don't know about host: FahadAhmed-PC");
System.exit(1);
}catch(IOException e){
System.err.println(e);
System.exit(1);
}
}
}
服务器代码。首先扫描文本文件,然后将销售对象添加到arraylist:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
public class SalesServer {
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(6667);
} catch (IOException e){
System.out.println("Could not listen on port: 5555.");
System.exit(1);
}
Socket clientSocket = null;
try{
clientSocket = serverSocket.accept();
}catch (IOException e){
System.out.println("Accept failed.");
System.exit(1);
}
ArrayList<Sales> salesList = getSalesList();
ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
}
private static ArrayList<Sales> getSalesList() throws FileNotFoundException {
ArrayList<Sales> list = new ArrayList<Sales>(10);
Scanner in = new Scanner(new BufferedReader(new FileReader("sales.txt")));
while(in.hasNext()){
String state;
int q1, q2, q3, q4;
state = in.nextLine();
q1 = in.nextInt();
q2 = in.nextInt();
q3 = in.nextInt();
q4 = in.nextInt();
in.nextLine();
Sales sale = new Sales(state, q1, q2, q3, q4);
System.out.println(sale.toString());
list.add(sale);
}
return null;
}
}
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.ObjectOutputStream;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类SalesServer{
公共静态void main(字符串[]args)引发IOException{
ServerSocket ServerSocket=null;
试一试{
serverSocket=新的serverSocket(6667);
}捕获(IOE异常){
System.out.println(“无法侦听端口:5555”);
系统出口(1);
}
套接字clientSocket=null;
试一试{
clientSocket=serverSocket.accept();
}捕获(IOE异常){
System.out.println(“接受失败”);
系统出口(1);
}
ArrayList salesList=getSalesList();
ObjectOutputStream out=新的ObjectOutputStream(clientSocket.getOutputStream());
}
私有静态ArrayList getSalesList()引发FileNotFoundException{
ArrayList=新的ArrayList(10);
Scanner in=new Scanner(new BufferedReader(new FileReader(“sales.txt”));
while(在.hasNext()中){
字符串状态;
int q1、q2、q3、q4;
state=in.nextLine();
q1=in.nextInt();
q2=in.nextInt();
q3=in.nextInt();
q4=in.nextInt();
in.nextLine();
销售额=新销售额(州、第一季度、第二季度、第三季度、第四季度);
System.out.println(sale.toString());
列表。添加(销售);
}
返回null;
}
}
这是一个关于套接字编程的很好的例子
其中没有ObjectOutputStream。不是答案。您只需更改
DataOutputStream out=newdataoutputstream(server.getOutputStream())
onObjectOutputStream out=新的ObjectOutputStream(server.getOutputStream())代码>所以将其纳入您的答案中,但所有这些都不能完成对象的编写,这是本问题的主题。您使用的是什么版本的JDK?如果您使用的是JDK7,那么我可以给您一个使用NIO2的示例,它比阻塞性能更好