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

系统 1644 0

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</

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论