java - 如何在p2p应用程序中随机选择谁开始游戏/聊天?

标签 java multithreading sockets p2p serversocket

大家好,我正在尝试制作一个游戏,两个主持人联系起来,他们将“掷硬币”,并确定谁先出局。我决定从基本代码开始。但是我真的没有主意。

Thread server2 = new Thread(new Server2());
    server2.start();
    try
    {
        Thread.sleep(5000);
    } catch (InterruptedException ex)
    {
        System.out.println(" Second host didnt work");
    }

    try {
     Socket skt = new Socket("127.0.0.1", 9090);
     String sendString = JOptionPane.showInputDialog(null, "Enter String to Capitalize");

     PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
     out.println(sendString);


     BufferedReader in = new BufferedReader(new
        InputStreamReader(skt.getInputStream()));
     System.out.print("Received string: '");

     while (!in.ready()) {}
     System.out.println(in.readLine()); // Read one line and output it

     System.out.print("'\n");
     in.close();
    }
    catch(Exception e) {
       System.out.print("Whoops! It didn't work!\n");
    }


}

private static class Server2 implements Runnable{

    @Override
    public void run()
    {
        System.out.println("Server 2 started it running");
        String data = "I come from the 2nd server!";
        try {
           ServerSocket srvr = new ServerSocket(9092);
           Socket skt = srvr.accept();

           BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));

           PrintWriter out = new PrintWriter(skt.getOutputStream(), true);

           while(true){
               String input = in.readLine();
               if (input == null || input.equals(".")){
                   break;
               }
               out.println(input.toUpperCase());
           }
           out.close();
           skt.close();
           srvr.close();
        }
        catch(Exception e) {
           System.out.print("server 2 didnt work");
        }
    }

到目前为止,我使服务器线程进入休眠状态,因此它使我有机会启动另一个主线程(基本上具有相同的功能。)

我只是在想如何启动两个服务器,做一个Math.random(不知道我将这个值随机放在哪里),然后决定谁先去。

另外,我将如何更改每个主机之间的转数。
谢谢

最佳答案

import java.util.Random;
public class RandomElement {
    private static Random rnd = new Random();

       public static Object getRandomElement(Object element1, Object element2) {
           if(rnd.nextBoolean()){
               return element1;
           }
           else{
               return element2;
           }
       }
}

该代码将允许您在任何类的2个元素之间随机决定,因此只需将两个主机分别作为element1和element2放入,这将返回一个随机主机,并允许您随机决定一个主机

关于java - 如何在p2p应用程序中随机选择谁开始游戏/聊天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292989/

相关文章:

java - 如何从同一类的另一个对象调用变量

c++ - 多线程 - 彼得森的算法不起作用

c# - 这种锁定和管理锁定异常的解决方案有什么问题?

c# - 我可以更好地优化这个并发吗?

c++ - 多路进程间通信

javascript - 错误: 7 PERMISSION_DENIED: Your application has authenticated using end user credentials from the Google Cloud SDK

java - 在套接字上发送和接收文件

Java 10 Eclipse + Maven "java.lang.module.FindException: Module myproject not found"

java - Windows 7 中是否有特殊权限来阻止文件创建?

Java 形式的未修饰 jframe 中的 Java 相对定位 swing 组件