单一模式下带服务器客户端的Java网络
我想创建一个包含3个相互通信的节点的网络。更详细地说,我尝试的是:单一模式下带服务器客户端的Java网络,java,Java,我想创建一个包含3个相互通信的节点的网络。更详细地说,我尝试的是: 创建一个服务器-客户机模型作为单个项目,然后再复制2个项目,在那里我有3个节点 当然,通过改变端口,我可以使它们进行通信,即使我在不同的计算机上分割项目 之后,我希望从一个项目将时间(一些弥补的时间延迟)发送到其他2个节点,从其他2个节点发送到verca,然后找到平均时间 我不想创建单个服务器和单个客户机,我想使用线程来创建一个统一的服务器客户机,通过简单的“运行”来运行 我遇到的问题是,先开始的节点也先结束,其余的节点挂起
- 创建一个服务器-客户机模型作为单个项目,然后再复制2个项目,在那里我有3个节点
- 当然,通过改变端口,我可以使它们进行通信,即使我在不同的计算机上分割项目
- 之后,我希望从一个项目将时间(一些弥补的时间延迟)发送到其他2个节点,从其他2个节点发送到verca,然后找到平均时间李>
- 我不想创建单个服务器和单个客户机,我想使用线程来创建一个统一的服务器客户机,通过简单的“运行”来运行李>
public class Server implements Runnable{
private int port;
private String name;
public Server(int port, String name){
this.port=port;
this.name=name;
}
public synchronized void run(){
while(true){
try{
Thread.sleep(5000);
method();
}
catch(Exception e){
return;
}
}
}
public synchronized void method() throws Exception{
double sum=0;
double average=0;
double[] values = new double[10];
ServerSocket server = new ServerSocket(port);
Socket s=server.accept();
InputStream in= s.getInputStream();
OutputStream out = s.getOutputStream();
PrintWriter w = new PrintWriter(out);
Scanner r = new Scanner(in);
for(int i=0; i<10; i++){
String msg = r.next();
sum = Double.parseDouble(msg);
values[i] = sum;
}
for(int j=0; j<values.length; j++){
average = average + values[j];
}
System.out.println(name+": "+average/10);
}
}
public class Client implements Runnable{
private int port;
private int id;
public Client(int port,int id){
this.port=port;
this.id = id;
}
public synchronized void run(){
try{
Thread.sleep(5000);
method();
}
catch(Exception e){
return;
}
}
public synchronized void method() throws Exception{
int num=0;
Random ran = new Random(10);
int d = 0;
Socket s = new Socket("localhost", port);
InputStream in= s.getInputStream();
OutputStream out = s.getOutputStream();
PrintWriter w = new PrintWriter(out);
Scanner r = new Scanner(in);
for(int i=0; i<10; i++){
d = ran.nextInt(10);
System.out.println("Client "+id+" sent "+d);
w.println(d);
w.flush();
}
}
}
public class Networks {
public static void main(String[] args) {
Server s = new Server(5000, "Server 0");
Server s2 = new Server(5001, "Server 1");
Client c = new Client(5002, 11);
Client c2 = new Client(5004, 22);
Thread t1 = new Thread(s);
Thread t2 = new Thread(c);
Thread t3 = new Thread(c2);
Thread t4 = new Thread(s2);
t1.start();
t2.start();
t3.start();
t4.start();
try{
t1.join();
t2.join();
t3.join();
t4.join();
}
catch(Exception e){
System.out.println("something");
}
}
}
您可能会忽略端口和其他内容,因为我已经为测试创建了相同的项目2次以上。另外method()方法只是用于测试,我确实会返回结果,但是当我从输出中运行所有3个项目时,我得到第一个项目的客户机不发送任何内容,我从两个服务器获取结果,第二个项目的客户机只工作1个,我只获得1个服务器结果,在第三个项目中,只有客户机发送,但服务器不返回任何内容。当输出完成时,第一个项目完成并结束,另两个项目永远运行。可能:
这只是一个理论,但看起来可能是这样。我已经问过很多次了,我想我会用古英语问它。有些密码,你的问题将被照亮,否则你将走在未知的道路上,永远被你对光的无知所遮蔽。