创建一个demo有三个节点的对等网络,Java案例
时间: 2024-03-03 21:51:10 浏览: 129
好的,以下是一个简单的Java代码示例,用于创建一个有三个节点的对等网络:
```java
import java.io.*;
import java.net.*;
public class PeerToPeerNetworkDemo {
// 节点1信息
private static final String NODE1_IP = "127.0.0.1";
private static final int NODE1_PORT = 8001;
// 节点2信息
private static final String NODE2_IP = "127.0.0.1";
private static final int NODE2_PORT = 8002;
// 节点3信息
private static final String NODE3_IP = "127.0.0.1";
private static final int NODE3_PORT = 8003;
// 创建套接字函数
private static Socket createSocket(String ip, int port) throws IOException {
return new Socket(ip, port);
}
// 节点1发送消息给节点2
private static void node1Send() throws IOException {
Socket s = createSocket(NODE2_IP, NODE2_PORT);
OutputStream out = s.getOutputStream();
out.write("Hello from Node 1".getBytes());
out.flush();
s.close();
}
// 节点2发送消息给节点3
private static void node2Send() throws IOException {
Socket s = createSocket(NODE3_IP, NODE3_PORT);
OutputStream out = s.getOutputStream();
out.write("Hello from Node 2".getBytes());
out.flush();
s.close();
}
// 节点3发送消息给节点1
private static void node3Send() throws IOException {
Socket s = createSocket(NODE1_IP, NODE1_PORT);
OutputStream out = s.getOutputStream();
out.write("Hello from Node 3".getBytes());
out.flush();
s.close();
}
// 创建节点函数
private static void createNode(String ip, int port, Runnable sendFunc) throws IOException {
ServerSocket ss = new ServerSocket(port);
System.out.println("Node is listening on " + ip + ":" + port);
while (true) {
Socket s = ss.accept();
InputStream in = s.getInputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String data = new String(buffer, 0, len);
System.out.println("Received message from " + s.getRemoteSocketAddress() + ": " + data);
sendFunc.run();
s.close();
}
}
public static void main(String[] args) throws IOException {
// 创建节点1
new Thread(() -> {
try {
createNode(NODE1_IP, NODE1_PORT, PeerToPeerNetworkDemo::node1Send);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
// 创建节点2
new Thread(() -> {
try {
createNode(NODE2_IP, NODE2_PORT, PeerToPeerNetworkDemo::node2Send);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
// 创建节点3
new Thread(() -> {
try {
createNode(NODE3_IP, NODE3_PORT, PeerToPeerNetworkDemo::node3Send);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
```
这个示例中,我们创建了三个节点,分别是`NODE1_IP: NODE1_PORT`,`NODE2_IP: NODE2_PORT`和`NODE3_IP: NODE3_PORT`。每个节点都可以通过创建套接字,连接到其他节点的IP地址和端口号,然后发送消息。当有连接时,节点会接收来自其他节点的消息,并发送消息给另一个节点。我们使用线程来运行每个节点的侦听和发送函数,以便它们可以同时运行。
请注意,这只是一个简单的示例,实际的对等网络可能需要更复杂的协议来确保数据的安全和完整性,以及更好的性能和可扩展性。
阅读全文
相关推荐













