您的位置:首页 > 编程语言 > Java开发

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

2008-05-06 06:12 351 查看
FROM:http://www.java2000.net/viewthread.jsp?tid=686

1 服务器端程序,接受连接并处理客户端的请求

ServerApp.java


package test;


import java.io.*;


import java.net.*;




/** *//**


* 服务器端程序


*


* @author luxuan310,修正赵学庆。


*


*/




public class ServerApp ...{


static final int PORT = 9000;


private ServerSocket serverSocket;


private Socket socket;


private BufferedReader netIn;


private PrintWriter netOut;




public ServerApp() throws IOException ...{


serverSocket = new ServerSocket(PORT);


System.out.println("server start");




while (true) ...{


// 等待连接


socket = serverSocket.accept();


ServerThread st = new ServerThread(socket);


new Thread(st).start();


}


}




class ServerThread implements Runnable ...{


private Socket socket;


private int randomNumber;


private int clientGuessNumber;




public ServerThread(Socket s) throws IOException ...{


socket = s;


netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));


netOut = new PrintWriter(socket.getOutputStream());


}




public void run() ...{


System.out.println("client" + socket.getInetAddress() + " is connect");


randomNumber = (int) (Math.random() * 100);


System.out.println("random number is:" + randomNumber);




try ...{


clientGuessNumber = Integer.parseInt(netIn.readLine());


System.out.println("client guess number is:" + clientGuessNumber);




for (int i = 3; i > 0; i--) ...{




if (clientGuessNumber == randomNumber) ...{


netOut.println("OK,恭喜,猜对了");


ClientApp.finished = true;




} else if (clientGuessNumber < randomNumber) ...{


netOut.println("您猜的数小了,您还有" + (i - 1) + "次机会");


ClientApp.finished = false;




} else if (clientGuessNumber > randomNumber) ...{


netOut.println("您猜的数大了,您还有" + (i - 1) + "次机会");


ClientApp.finished = false;


}


netOut.flush();




if (!ClientApp.finished) ...{


clientGuessNumber = Integer.parseInt(netIn.readLine());




} else ...{


break;


}


}




if (!ClientApp.finished) ...{


netOut.println("OK,您没有机会了,游戏结束");


}


ClientApp.finished = true;




} catch (IOException e) ...{




} finally ...{




try ...{


netOut.close();


netIn.close();


socket.close();




} catch (IOException ee) ...{


}


}


}


}




public static void main(String[] args) throws IOException ...{


new ServerApp();


}


}

2 客户端程序,发送每次猜的数字


package test;


import java.io.*;


import java.net.*;




public class ClientApp ...{


private Socket socket;


private BufferedReader netIn;


private PrintWriter netOut;


private BufferedReader keyboardIn;


static Boolean finished = false;




public ClientApp() throws IOException ...{


System.out.println("请输入服务器地址,连接本地服务器请输入localhost");


keyboardIn = new BufferedReader(new InputStreamReader(System.in));




try ...{




if (keyboardIn.readLine().equalsIgnoreCase("localhost")) ...{


socket = new Socket(InetAddress.getLocalHost(), ServerApp.PORT);




} else ...{


socket = new Socket(InetAddress.getByName(keyboardIn.readLine()), ServerApp.PORT);


}


netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));


netOut = new PrintWriter(socket.getOutputStream());




} catch (UnknownHostException e) ...{


System.err.println("连接不到服务器");


System.exit(-1);


}


System.out.println("连接成功");




while (!finished) ...{


System.out.println("请输入0-100之间的数字");


netOut.println(keyboardIn.readLine());


netOut.flush();


String str = netIn.readLine();




if (str == null) ...{


finished = true;


break;


}


System.out.println(str);




if (str.startsWith("OK")) ...{


finished = true;


break;


}


}


netIn.close();


netOut.close();


keyboardIn.close();


socket.close();


}




public static void main(String[] args) throws IOException ...{


new ClientApp();


}


}

3 运行效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: