Java多线程Socket操作猜数游戏样例

1   服务器端程序,接受连接并处理客户端的请求
 1 ServerApp.java
 2      package  test;
 3      import  java.io. * ;
 4      import  java.net. * ;
 5      /** */ /**
 6     * 服务器端程序
 7     *
 8     * @author luxuan310,修正赵学庆。
 9     *
10     */

11      public   class  ServerApp  {
12      static final int PORT = 9000;
13      private ServerSocket serverSocket;
14      private Socket socket;
15      private BufferedReader netIn;
16      private PrintWriter netOut;
17      public ServerApp() throws IOException {
18        serverSocket = new ServerSocket(PORT);
19        system.out.println("server start");
20        while (true{
21          // 等待连接
22          socket = serverSocket.accept();
23          ServerThread st = new ServerThread(socket);
24          new Thread(st).start();
25        }

26      }

27      class ServerThread implements Runnable {
28        private Socket socket;
29        private int randomNumber;
30        private int clientGuessNumber;
31        public ServerThread(Socket s) throws IOException {
32          socket = s;
33          netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
34          netOut = new PrintWriter(socket.getOutputStream());
35        }

36        public void run() {
37          system.out.println("client" + socket.getInetAddress() + " is connect");
38          randomNumber = (int) (Math.random() * 100);
39          system.out.println("random number is:" + randomNumber);
40          try {
41            clientGuessNumber = Integer.parseInt(netIn.readLine());
42            system.out.println("client guess number is:" + clientGuessNumber);
43            for (int i = 3; i > 0; i--{
44              if (clientGuessNumber == randomNumber) {
45                netOut.println("OK,恭喜,猜对了");
46                ClientApp.finished = true;
47              }
 else if (clientGuessNumber < randomNumber) {
48                netOut.println("您猜的数小了,您还有" + (i - 1+ "次机会");
49                ClientApp.finished = false;
50              }
 else if (clientGuessNumber > randomNumber) {
51                netOut.println("您猜的数大了,您还有" + (i - 1+ "次机会");
52                ClientApp.finished = false;
53              }

54              netOut.flush();
55              if (!ClientApp.finished) {
56                clientGuessNumber = Integer.parseInt(netIn.readLine());
57              }
 else {
58                break;
59              }

60            }

61            if (!ClientApp.finished) {
62              netOut.println("OK,您没有机会了,游戏结束");
63            }

64            ClientApp.finished = true;
65          }
 catch (IOException e) {
66          }
 finally {
67            try {
68              netOut.close();
69              netIn.close();
70              socket.close();
71            }
 catch (IOException ee) {
72            }

73          }

74        }

75      }

76      public static void main(String[] args) throws IOException {
77        new ServerApp();
78      }

79    }
 2 客户端程序,发送每次猜的数字
 1   package  test;
 2      import  java.io. * ;
 3      import  java.net. * ;
 4      public   class  ClientApp  {
 5      private Socket socket;
 6      private BufferedReader netIn;
 7      private PrintWriter netOut;
 8      private BufferedReader keyboardIn;
 9      static Boolean finished = false;
10      public ClientApp() throws IOException {
11        system.out.println("请输入服务器地址,连接本地服务器请输入localhost");
12        keyboardIn = new BufferedReader(new InputStreamReader(System.in));
13        try {
14          if (keyboardIn.readLine().equalsIgnoreCase("localhost")) {
15            socket = new Socket(InetAddress.getLocalHost(), ServerApp.PORT);
16          }
 else {
17            socket = new Socket(InetAddress.getByName(keyboardIn.readLine()), ServerApp.PORT);
18          }

19          netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
20          netOut = new PrintWriter(socket.getOutputStream());
21        }
 catch (UnknownHostException e) {
22          system.err.println("连接不到服务器");
23          system.exit(-1);
24        }

25        system.out.println("连接成功");
26        while (!finished) {
27          system.out.println("请输入0-100之间的数字");
28          netOut.println(keyboardIn.readLine());
29          netOut.flush();
30          String str = netIn.readLine();
31          if (str == null{
32            finished = true;
33            break;
34          }

35          system.out.println(str);
36          if (str.startsWith("OK")) {
37            finished = true;
38            break;
39          }

40        }

41        netIn.close();
42        netOut.close();
43        keyboardIn.close();
44        socket.close();
45      }

46      public static void main(String[] args) throws IOException {
47        new ClientApp();
48      }

49    }
    
    3.运行结果

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值