posts - 0, comments - 2, trackbacks - 0, articles - 4

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

Posted on 2008-05-07 21:38 飞雪无情 阅读(230) 评论(0)  编辑  收藏 所属分类: JAVA
1  服务器端程序,接受连接并处理客户端的请求
 1ServerApp.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.运行结果

 



只有注册用户登录后才能发表评论。


网站导航: