Client and Server Demo

Client and Server Demo 打印
/* From http://java.sun.com/docs/books/tutorial/index.html */
import  java.io.BufferedReader;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.io.PrintWriter;
import  java.net.Socket;
import  java.net.UnknownHostException;

public class  EchoClient  {
     public static  void  main ( String []  args throws  IOException  {

         Socket echoSocket =  null ;
         PrintWriter out =  null ;
         BufferedReader in =  null ;

         try  {
             echoSocket =  new  Socket ( "taranis" 7 ) ;
             out =  new  PrintWriter ( echoSocket.getOutputStream () true ) ;
             in =  new  BufferedReader ( new  InputStreamReader (
                                         echoSocket.getInputStream ())) ;
         catch  ( UnknownHostException e ) {
             System.err.println ( "Don't know about host: taranis." ) ;
             System.exit ( 1 ) ;
         catch  ( IOException e ) {
             System.err.println ( "Couldn't get I/O for "
                                "the connection to: taranis." ) ;
             System.exit ( 1 ) ;
         }

   BufferedReader stdIn =  new  BufferedReader (
                                    new  InputStreamReader ( System.in )) ;
   String userInput;

   while  (( userInput = stdIn.readLine ())  !=  null ) {
       out.println ( userInput ) ;
       System.out.println ( "echo: "  + in.readLine ()) ;
   }

   out.close () ;
   in.close () ;
   stdIn.close () ;
   echoSocket.close () ;
     }
}




import  java.io.BufferedReader;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.io.PrintWriter;
import  java.net.ServerSocket;
import  java.net.Socket;

public class  KnockKnockServer  {
   public static  void  main ( String []  args throws  IOException  {

     ServerSocket serverSocket =  null ;
     try  {
       serverSocket =  new  ServerSocket ( 4444 ) ;
     catch  ( IOException e ) {
       System.err.println ( "Could not listen on port: 4444." ) ;
       System.exit ( 1 ) ;
     }

     Socket clientSocket =  null ;
     try  {
       clientSocket = serverSocket.accept () ;
     catch  ( IOException e ) {
       System.err.println ( "Accept failed." ) ;
       System.exit ( 1 ) ;
     }

     PrintWriter out =  new  PrintWriter ( clientSocket.getOutputStream () true ) ;
     BufferedReader in =  new  BufferedReader ( new  InputStreamReader (
         clientSocket.getInputStream ())) ;
     String inputLine, outputLine;
     KnockKnockProtocol kkp =  new  KnockKnockProtocol () ;

     outputLine = kkp.processInput ( null ) ;
     out.println ( outputLine ) ;

     while  (( inputLine = in.readLine ())  !=  null ) {
       outputLine = kkp.processInput ( inputLine ) ;
       out.println ( outputLine ) ;
       if  ( outputLine.equals ( "Bye." ))
         break ;
     }
     out.close () ;
     in.close () ;
     clientSocket.close () ;
     serverSocket.close () ;
   }
}

class  KnockKnockProtocol  {
   private static final  int  WAITING =  0 ;

   private static final  int  SENTKNOCKKNOCK =  1 ;

   private static final  int  SENTCLUE =  2 ;

   private static final  int  ANOTHER =  3 ;

   private static final  int  NUMJOKES =  5 ;

   private  int  state = WAITING;

   private  int  currentJoke =  0 ;

   private  String []  clues =  "Turnip" "Little Old Lady" "Atch" "Who" ,
       "Who"  } ;

   private  String []  answers =  "Turnip the heat, it's cold in here!" ,
       "I didn't know you could yodel!" "Bless you!" ,
       "Is there an owl in here?" "Is there an echo in here?"  } ;

   public  String processInput ( String theInput ) {
     String theOutput =  null ;

     if  ( state == WAITING ) {
       theOutput =  "Knock! Knock!" ;
       state = SENTKNOCKKNOCK;
     else if  ( state == SENTKNOCKKNOCK ) {
       if  ( theInput.equalsIgnoreCase ( "Who's there?" )) {
         theOutput = clues [ currentJoke ] ;
         state = SENTCLUE;
       else  {
         theOutput =  "You're supposed to say \"Who's there?\"! "
             "Try again. Knock! Knock!" ;
       }
     else if  ( state == SENTCLUE ) {
       if  ( theInput.equalsIgnoreCase ( clues [ currentJoke " who?" )) {
         theOutput = answers [ currentJoke " Want another? (y/n)" ;
         state = ANOTHER;
       else  {
         theOutput =  "You're supposed to say \""  + clues [ currentJoke ]
             " who?\""  "! Try again. Knock! Knock!" ;
         state = SENTKNOCKKNOCK;
       }
     else if  ( state == ANOTHER ) {
       if  ( theInput.equalsIgnoreCase ( "y" )) {
         theOutput =  "Knock! Knock!" ;
         if  ( currentJoke ==  ( NUMJOKES -  1 ))
           currentJoke =  0 ;
         else
           currentJoke++;
         state = SENTKNOCKKNOCK;
       else  {
         theOutput =  "Bye." ;
         state = WAITING;
       }
     }
     return  theOutput;
   }
}




import  java.io.BufferedReader;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.io.PrintWriter;
import  java.net.ServerSocket;
import  java.net.Socket;

public class  KKMultiServer  {
   public static  void  main ( String []  args throws  IOException  {
     ServerSocket serverSocket =  null ;
     boolean  listening =  true ;

     try  {
       serverSocket =  new  ServerSocket ( 4444 ) ;
     catch  ( IOException e ) {
       System.err.println ( "Could not listen on port: 4444." ) ;
       System.exit ( - 1 ) ;
     }

     while  ( listening )
       new  KKMultiServerThread ( serverSocket.accept ()) .start () ;

     serverSocket.close () ;
   }
}

class  KKMultiServerThread  extends  Thread  {
   private  Socket socket =  null ;

   public  KKMultiServerThread ( Socket socket ) {
     super ( "KKMultiServerThread" ) ;
     this .socket = socket;
   }

   public  void  run () {

     try  {
       PrintWriter out =  new  PrintWriter ( socket.getOutputStream () true ) ;
       BufferedReader in =  new  BufferedReader ( new  InputStreamReader ( socket
           .getInputStream ())) ;

       String inputLine, outputLine;
       KnockKnockProtocol kkp =  new  KnockKnockProtocol () ;
       outputLine = kkp.processInput ( null ) ;
       out.println ( outputLine ) ;

       while  (( inputLine = in.readLine ())  !=  null ) {
         outputLine = kkp.processInput ( inputLine ) ;
         out.println ( outputLine ) ;
         if  ( outputLine.equals ( "Bye" ))
           break ;
       }
       out.close () ;
       in.close () ;
       socket.close () ;

     catch  ( IOException e ) {
       e.printStackTrace () ;
     }
   }
}

class  KnockKnockProtocol  {
   private static final  int  WAITING =  0 ;

   private static final  int  SENTKNOCKKNOCK =  1 ;

   private static final  int  SENTCLUE =  2 ;

   private static final  int  ANOTHER =  3 ;

   private static final  int  NUMJOKES =  5 ;

   private  int  state = WAITING;

   private  int  currentJoke =  0 ;

   private  String []  clues =  "Turnip" "Little Old Lady" "Atch" "Who" ,
       "Who"  } ;

   private  String []  answers =  "Turnip the heat, it's cold in here!" ,
       "I didn't know you could yodel!" "Bless you!" ,
       "Is there an owl in here?" "Is there an echo in here?"  } ;

   public  String processInput ( String theInput ) {
     String theOutput =  null ;

     if  ( state == WAITING ) {
       theOutput =  "Knock! Knock!" ;
       state = SENTKNOCKKNOCK;
     else if  ( state == SENTKNOCKKNOCK ) {
       if  ( theInput.equalsIgnoreCase ( "Who's there?" )) {
         theOutput = clues [ currentJoke ] ;
         state = SENTCLUE;
       else  {
         theOutput =  "You're supposed to say \"Who's there?\"! "
             "Try again. Knock! Knock!" ;
       }
     else if  ( state == SENTCLUE ) {
       if  ( theInput.equalsIgnoreCase ( clues [ currentJoke " who?" )) {
         theOutput = answers [ currentJoke " Want another? (y/n)" ;
         state = ANOTHER;
       else  {
         theOutput =  "You're supposed to say \""  + clues [ currentJoke ]
             " who?\""  "! Try again. Knock! Knock!" ;
         state = SENTKNOCKKNOCK;
       }
     else if  ( state == ANOTHER ) {
       if  ( theInput.equalsIgnoreCase ( "y" )) {
         theOutput =  "Knock! Knock!" ;
         if  ( currentJoke ==  ( NUMJOKES -  1 ))
           currentJoke =  0 ;
         else
           currentJoke++;
         state = SENTKNOCKKNOCK;
       else  {
         theOutput =  "Bye." ;
         state = WAITING;
       }
     }
     return  theOutput;
   }
}




import  java.io.BufferedReader;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.io.PrintWriter;
import  java.net.Socket;
import  java.net.UnknownHostException;

public class  KnockKnockClient  {
   public static  void  main ( String []  args throws  IOException  {

     Socket kkSocket =  null ;
     PrintWriter out =  null ;
     BufferedReader in =  null ;

     try  {
       kkSocket =  new  Socket ( "taranis" 4444 ) ;
       out =  new  PrintWriter ( kkSocket.getOutputStream () true ) ;
       in =  new  BufferedReader ( new  InputStreamReader ( kkSocket
           .getInputStream ())) ;
     catch  ( UnknownHostException e ) {
       System.err.println ( "Don't know about host: taranis." ) ;
       System.exit ( 1 ) ;
     catch  ( IOException e ) {
       System.err
           .println ( "Couldn't get I/O for the connection to: taranis." ) ;
       System.exit ( 1 ) ;
     }

     BufferedReader stdIn =  new  BufferedReader ( new  InputStreamReader (
         System.in )) ;
     String fromServer;
     String fromUser;

     while  (( fromServer = in.readLine ())  !=  null ) {
       System.out.println ( "Server: "  + fromServer ) ;
       if  ( fromServer.equals ( "Bye." ))
         break ;

       fromUser = stdIn.readLine () ;
       if  ( fromUser !=  null ) {
         System.out.println ( "Client: "  + fromUser ) ;
         out.println ( fromUser ) ;
       }
     }

     out.close () ;
     in.close () ;
     stdIn.close () ;
     kkSocket.c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值