guessserver.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 161 行

JAVA
161
字号
     import java.io.*;
     import java.awt.*;
     import java.applet.*;
     import java.net.*;

     // 和客户端建立一个猜数字游戏的服务
     class GuessService extends AbstractConnection implements Runnable
     {
          // 要猜测的目标数字
          private int number;

          // 可能产生的数字的边界
          private final int LOW  = 1;
          private final int HIGH = 1000;

          // 在猜对了的时候输出的几个String
          private final String[] EXCLAIMS =
                  { "Wow", "Cool", "Great", "Sweet", "Excellent", "Neat" };

          // 服务执行线程
          private Thread exec;

          // 用给定的Socket创建一个GuessService对象
          public GuessService(Socket clientSocket)
          {
               super(clientSocket);
           
               java.util.Random random = new java.util.Random();
               
               // 产生一个介于LOW和HIGH之间的数字
               do
               {
                    number = Math.abs(random.nextInt());
               }    while(number < LOW || number > HIGH);

               // 在服务器控制台打印要猜测的数字
               System.out.println("I'm thinking about " + number + "...");
          }

          // 从EXCLAIMS数组产生一个随机字符串
          public String getRandomExclaim()
          {
               java.util.Random r = new java.util.Random();
               int index = Math.abs(r.nextInt()%EXCLAIMS.length);
               return EXCLAIMS[index];
          }

          public void start()
          {
               exec = new Thread(this);
               exec.start();
          }

          public void run()
          {     
               // 打开连接
               if(! open())
               {
                    System.out.println("Could not open connection.");
                    return;
               }

               send("Prompt", "Enter a number between " + LOW + "and " + HIGH + ", or -1 to give up: ");                     

               // 客户端的输入              
               String str = "";
      
               // 所尝试的次数
               int tries = 0;
    
               Thread t = Thread.currentThread();
               while(exec == t)
               {
                    recv();
        
                    str = parseHeader();

                    // 看用户是否做出了猜测
                    if(str.equals("Guess"))
                    {
                        int n = 0;  // 所猜的数字
                        ++ tries;
                        
                        try 
                        {
                             n = Integer.parseInt(parseMessage());
                        }
                        catch(NumberFormatException e)
                        {
                             // 输入不是有效数字
                             send("Prompt", "Sorry, but you must guess a number! Try again: ");                     
                        }

                        // 判断用户是否只是放弃
                        if(n == -1)
                        {
                             send("Echo", "I'm sorry you gave up after " + tries + " tries! The number was " +   
                                  number + "!");
                        }

                        // 判断猜测是否正确           
                        if(n == number)
                        {
                             send("Echo", getRandomExclaim() + "! You guessed correctly! And it only took you " +
                                  tries + " tries!");

                             // 在终止服务前等待几秒
                             try 
                             {
                                  Thread.sleep(5000);
                             }
                             catch(InterruptedException e) { }

                             break;
                        }

                        // 否则数字不是小了就是大了

                        else if(n < number)
                        {
                             send("Prompt", "Sorry, try guessing higher: ");
                        }

                        else if(n > number)
                        {
                                  send("Prompt", "Sorry, try guessing lower: ");
                        }
                    }   // "Guess"

                    // 客户端不应该抛曲线球,所以接到无效消息头则退出
                    else 
                    {
                         send("Echo", "I don't know what you mean; terminating connection");
                         return;
                    }

                    try 
                    {
                         Thread.sleep(10);
                    }
                    catch(InterruptedException e) { }
               }

               // 终止服务
               send("Echo", "Thanks for playing!  Play again soon!");                                           
               send(END_OF_TRANSMISSION, "");

          }    // run

     }    // GuessService

     // 一个简单的TCP连接服务器
     public class GuessServer extends GUIServer 
     {
          // 创建一个新的GuessService对象
          protected void createService(Socket s)
          {
               new GuessService(s).start();
          }

     }    // GuessServer

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?