当在不同的 class 中创建对象时,如何通过 ObjectOutputStream 写入对象?
How do I write Objects through a ObjectOutputStream, when the Objects are created in a different class?
我试图总结我的问题,但实际上背后还有更多问题。对于 uni 的任务,我们应该创建两个构造函数(英语不是我的母语)
1) public SecureInputStream(InputStream 基础,OutputStream 远程)
2) public SecureOutputStream(OutputStream 基础,InputStream 远程)
1) 应该创建 BigIntegers g,n,k 然后生成一个 public 键
K=g^k mod n
,然后通过远程发送g
,n
和k
到对方,然后假设读取对方k
并创建秘密s= k^k mod n
并用它启动随机生成器。我应该覆盖
write(int b)
,所以 write 将加密 s,使用方法从 BigInteger class 中异或,然后通过远程将其发送到另一端。
2) 应该从 1) 等待 g.n,创建它自己的 k,然后通过远程发回。构造函数还将使用秘密 s
启动随机生成器
我们导师给了我们两个"easy" classes client和server,分别使用了Socket,Port的情况。我的问题是,每个 classes 都有自己的 input/output 流 reads/writes 东西。我如何介于两者之间,更重要的是,一旦读取信息,发送的信息到底在哪里?这两天我所做的就是在线阅读和观看教程。我已经完全理解流是什么,虽然我不能真正理解它们是如何工作的。
如何通过该流发送多个内容?对方怎么知道我发送的是哪个?我一般如何发送东西?
我希望有人能在这里帮助我。那么这是我到目前为止的代码,主要方法来自我们的讲师。想象一下我做了所有的进口。
//Error Method: Invalid method declaration, return type missing,
//I'm guessing the constructor needs to sit in a class called
//SecureInputStream, but how can I use the stuff in the class Client
//when the constructor I need is in another?
public SecureInputStream(InputStream base, OutputStream remote) {
super();
//g,n,k,s are created
BigInteger g = BigInteger.probablePrime(1024, new SecureRandom());
BigInteger n = BigInteger.probablePrime(1024, new SecureRandom());
BigInteger k = BigInteger.probablePrime(1024, new SecureRandom());
BigInteger s = BigInteger.probablePrime(1024, new SecureRandom());
Random r = new Random();
r.nextInt();
BigInteger exponent1 = new BigInteger("r");
BigInteger exponent2 = new BigInteger("k");
k = g.modPow(exponent1, n);
s = k.modPow(exponent2, n);
}
public static void main(String... args) {
Socket server = null;
try {
// Connect to server on local machine ("localhost") and port 3145.
server = new Socket("localhost", 3145);
// Get input stream from server and read its message
Scanner in = new Scanner(server.getInputStream());
// If we need to send messages to the server:
// OutputStream out = server.getOutputStream();
while (in.hasNext()) {
System.out.println(in.nextLine());
}
in.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (server != null) {
server.close();
}
} catch (IOException e) {
}
}
}
How do I write Objects through an ObjectOutputStream,
你打电话给ObjectOutputStream.writeObject().
- 你没有问的第二个问题:如何通过
ObjectInputStream
读取对象?
你打电话给ObjectInputStream.readObject().
- 您没有问的第三个问题:如何发现传入对象的类型?
您可以通过 instanceof
运算符发现接收到的对象的类型。但是对于大多数协议,包括您描述的协议,您不需要这样做。协议通常定义什么时候发送什么,所以你所要做的就是相应地阅读。
when the Objects are created in a different class?
创建对象的位置没有任何区别。
我试图总结我的问题,但实际上背后还有更多问题。对于 uni 的任务,我们应该创建两个构造函数(英语不是我的母语)
1) public SecureInputStream(InputStream 基础,OutputStream 远程)
2) public SecureOutputStream(OutputStream 基础,InputStream 远程)
1) 应该创建 BigIntegers g,n,k 然后生成一个 public 键
K=g^k mod n
,然后通过远程发送g
,n
和k
到对方,然后假设读取对方k
并创建秘密s= k^k mod n
并用它启动随机生成器。我应该覆盖
write(int b)
,所以 write 将加密 s,使用方法从 BigInteger class 中异或,然后通过远程将其发送到另一端。
2) 应该从 1) 等待 g.n,创建它自己的 k,然后通过远程发回。构造函数还将使用秘密 s
启动随机生成器我们导师给了我们两个"easy" classes client和server,分别使用了Socket,Port的情况。我的问题是,每个 classes 都有自己的 input/output 流 reads/writes 东西。我如何介于两者之间,更重要的是,一旦读取信息,发送的信息到底在哪里?这两天我所做的就是在线阅读和观看教程。我已经完全理解流是什么,虽然我不能真正理解它们是如何工作的。
如何通过该流发送多个内容?对方怎么知道我发送的是哪个?我一般如何发送东西?
我希望有人能在这里帮助我。那么这是我到目前为止的代码,主要方法来自我们的讲师。想象一下我做了所有的进口。
//Error Method: Invalid method declaration, return type missing,
//I'm guessing the constructor needs to sit in a class called
//SecureInputStream, but how can I use the stuff in the class Client
//when the constructor I need is in another?
public SecureInputStream(InputStream base, OutputStream remote) {
super();
//g,n,k,s are created
BigInteger g = BigInteger.probablePrime(1024, new SecureRandom());
BigInteger n = BigInteger.probablePrime(1024, new SecureRandom());
BigInteger k = BigInteger.probablePrime(1024, new SecureRandom());
BigInteger s = BigInteger.probablePrime(1024, new SecureRandom());
Random r = new Random();
r.nextInt();
BigInteger exponent1 = new BigInteger("r");
BigInteger exponent2 = new BigInteger("k");
k = g.modPow(exponent1, n);
s = k.modPow(exponent2, n);
}
public static void main(String... args) {
Socket server = null;
try {
// Connect to server on local machine ("localhost") and port 3145.
server = new Socket("localhost", 3145);
// Get input stream from server and read its message
Scanner in = new Scanner(server.getInputStream());
// If we need to send messages to the server:
// OutputStream out = server.getOutputStream();
while (in.hasNext()) {
System.out.println(in.nextLine());
}
in.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (server != null) {
server.close();
}
} catch (IOException e) {
}
}
}
How do I write Objects through an
ObjectOutputStream,
你打电话给ObjectOutputStream.writeObject().
- 你没有问的第二个问题:如何通过
ObjectInputStream
读取对象?
你打电话给ObjectInputStream.readObject().
- 您没有问的第三个问题:如何发现传入对象的类型?
您可以通过 instanceof
运算符发现接收到的对象的类型。但是对于大多数协议,包括您描述的协议,您不需要这样做。协议通常定义什么时候发送什么,所以你所要做的就是相应地阅读。
when the Objects are created in a different class?
创建对象的位置没有任何区别。