A simple client-server application in java in which a client sends a message to a server and the server tries to be funny by sending back a funny response.
Size: 128.25 KB
Language: en
Added: Dec 02, 2015
Slides: 19 pages
Slide Content
Introduction
THEKNOCKKNOCKPROTOCOL
Muhammad Adil Raja
Roaming Researchers,R.
December 2, 2015
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
OUTLINE
1INTRODUCTION2THECLIENT3THESERVER
4THEKNOCKKNOCKPROTOCOL
5REFERENCES
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
OUTLINE
1INTRODUCTION2THECLIENT3THESERVER4THEKNOCKKNOCKPROTOCOL
5REFERENCES
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
OUTLINE
1INTRODUCTION2THECLIENT3THESERVER4THEKNOCKKNOCKPROTOCOL5REFERENCES
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
OUTLINE
1INTRODUCTION2THECLIENT3THESERVER4THEKNOCKKNOCKPROTOCOL5REFERENCES
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
OUTLINE
1INTRODUCTION2THECLIENT3THESERVER4THEKNOCKKNOCKPROTOCOL5REFERENCES
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
INTRODUCTION
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THECLIENTI
/
C o p y r i g h t ( c ) 1995 , 2013 , O r a c l e and / o r i t s a f f i l i a t e s . A l l r i g h t s r e s e r v e d .
R e d i s t r i b u t i o n and use i n s o u r c e and b i n a r y forms , w i t h o r w i t h o u t
m o d i f i c a t i o n , a r e p e r m i t t e d p r o v i d e d t h a t t h e f o l l o w i n g c o n d i t i o n s
a r e met :
R e d i s t r i b u t i o n s o f s o u r c e code must r e t a i n t h e above c o p y r i g h t
n o t i c e , t h i s l i s t o f c o n d i t i o n s and t h e f o l l o w i n g d i s c l a i m e r .
R e d i s t r i b u t i o n s i n b i n a r y f o r m must r e p r o d u c e t h e above c o p y r i g h t
n o t i c e , t h i s l i s t o f c o n d i t i o n s and t h e f o l l o w i n g d i s c l a i m e r i n t h e
d o c u m e n t a t i o n and / o r o t h e r m a t e r i a l s p r o v i d e d w i t h t h e d i s t r i b u t i o n .
N e i t h e r t h e name o f O r a c l e o r t h e names o f i t s
c o n t r i b u t o r s may be used t o endorse o r promote p r o d u c t s d e r i v e d
f r o m t h i s s o f t w a r e w i t h o u t s p e c i f i c p r i o r w r i t t e n p e r m i s s i o n .
THIS SOFTWARE I S PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS
I S " AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING , BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL ,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, DATA, OR
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THECLIENTII
PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF
L I A B I L I T Y , WHETHER IN CONTRACT, STRICT L I A B I L I T Y , OR TORT ( INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN I F ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/
importj a v a . i o .;
importj a v a . n e t .;
p u b l i c c l a s sK n o c k K n o c k C l i e n t {
p u b l i c s t a t i c voidmain ( S t r i n g [ ] a r g s )throwsI O E x c e p t i o n {
i f( a r g s . l e n g t h ! = 2 ) {
System . e r r . p r i n t l n (
" Usage :j a v aE c h o C l i e n t< h o s tname>< p o r tnumber> " ) ;
System . e x i t ( 1 ) ;
}
S t r i n g hostName = a r g s [ 0 ] ;
i n tportNumber = I n t e g e r . p a r s e I n t ( a r g s [ 1 ] ) ;
t r y(
S o c k e t k k S o c k e t =newS o c k e t ( hostName , portNumber ) ;
P r i n t W r i t e r o u t =newP r i n t W r i t e r ( k k S o c k e t . g e t O u t p u t S t r e a m ( ) ,t r u e) ;
B u f f e r e d R e a d e r i n =newB u f f e r e d R e a d e r (
newI n p u t S t r e a m R e a d e r ( k k S o c k e t . g e t I n p u t S t r e a m ( ) ) ) ;
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THECLIENTIII
) {
B u f f e r e d R e a d e r s t d I n =
newB u f f e r e d R e a d e r (newI n p u t S t r e a m R e a d e r ( System . i n ) ) ;
S t r i n g f r o m S e r v e r ;
S t r i n g f r o m U s e r ;
w h i l e( ( f r o m S e r v e r = i n . r e a d L i n e ( ) ) ! =n u l l) {
System . o u t . p r i n t l n ( " S e r v e r :" + f r o m S e r v e r ) ;
i f( f r o m S e r v e r . e q u a l s ( " Bye . " ) )
break;
f r o m U s e r = s t d I n . r e a d L i n e ( ) ;
i f( f r o m U s e r ! =n u l l) {
System . o u t . p r i n t l n ( " C l i e n t :" + f r o m U s e r ) ;
o u t . p r i n t l n ( f r o m U s e r ) ;
}
}
}catch( UnknownHostException e ) {
System . e r r . p r i n t l n ( " Don ' tknowa b o u th o s t" + hostName ) ;
System . e x i t ( 1 ) ;
}catch( I O E x c e p t i o n e ) {
System . e r r . p r i n t l n ( " Couldn ' tg e tI /Of o rt h ec o n n e c t i o nt o" +
hostName ) ;
System . e x i t ( 1 ) ;
}
}
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THECLIENTIV
}
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THESERVERI
/
C o p y r i g h t ( c ) 1995 , 2014 , O r a c l e and / o r i t s a f f i l i a t e s . A l l r i g h t s r e s e r v e d .
R e d i s t r i b u t i o n and use i n s o u r c e and b i n a r y forms , w i t h o r w i t h o u t
m o d i f i c a t i o n , a r e p e r m i t t e d p r o v i d e d t h a t t h e f o l l o w i n g c o n d i t i o n s
a r e met :
R e d i s t r i b u t i o n s o f s o u r c e code must r e t a i n t h e above c o p y r i g h t
n o t i c e , t h i s l i s t o f c o n d i t i o n s and t h e f o l l o w i n g d i s c l a i m e r .
R e d i s t r i b u t i o n s i n b i n a r y f o r m must r e p r o d u c e t h e above c o p y r i g h t
n o t i c e , t h i s l i s t o f c o n d i t i o n s and t h e f o l l o w i n g d i s c l a i m e r i n t h e
d o c u m e n t a t i o n and / o r o t h e r m a t e r i a l s p r o v i d e d w i t h t h e d i s t r i b u t i o n .
N e i t h e r t h e name o f O r a c l e o r t h e names o f i t s
c o n t r i b u t o r s may be used t o endorse o r promote p r o d u c t s d e r i v e d
f r o m t h i s s o f t w a r e w i t h o u t s p e c i f i c p r i o r w r i t t e n p e r m i s s i o n .
THIS SOFTWARE I S PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS
I S " AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING , BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL ,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, DATA, OR
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THESERVERII
PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF
L I A B I L I T Y , WHETHER IN CONTRACT, STRICT L I A B I L I T Y , OR TORT ( INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN I F ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/
importj a v a . n e t .;
importj a v a . i o .;
p u b l i c c l a s sKnockKnockServer {
p u b l i c s t a t i c voidmain ( S t r i n g [ ] a r g s )throwsI O E x c e p t i o n {
i f( a r g s . l e n g t h ! = 1 ) {
System . e r r . p r i n t l n ( " Usage :j a v aKnockKnockServer < p o r tnumber> " ) ;
System . e x i t ( 1 ) ;
}
i n tportNumber = I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ;
t r y(
S e r v e r S o c k e t s e r v e r S o c k e t =newS e r v e r S o c k e t ( portNumber ) ;
S o c k e t c l i e n t S o c k e t = s e r v e r S o c k e t . a c c e p t ( ) ;
P r i n t W r i t e r o u t =
newP r i n t W r i t e r ( c l i e n t S o c k e t . g e t O u t p u t S t r e a m ( ) ,t r u e) ;
B u f f e r e d R e a d e r i n =newB u f f e r e d R e a d e r (
newI n p u t S t r e a m R e a d e r ( c l i e n t S o c k e t . g e t I n p u t S t r e a m ( ) ) ) ;
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THESERVERIII
) {
S t r i n g i n p u t L i n e , o u t p u t L i n e ;
/ / I n i t i a t e c o n v e r s a t i o n w i t h c l i e n t
K n o c k K n o c k P r o t o c o l kkp =newK n o c k K n o c k P r o t o c o l ( ) ;
o u t p u t L i n e = kkp . p r o c e s s I n p u t (n u l l) ;
o u t . p r i n t l n ( o u t p u t L i n e ) ;
w h i l e( ( i n p u t L i n e = i n . r e a d L i n e ( ) ) ! =n u l l) {
o u t p u t L i n e = kkp . p r o c e s s I n p u t ( i n p u t L i n e ) ;
o u t . p r i n t l n ( o u t p u t L i n e ) ;
i f( o u t p u t L i n e . e q u a l s ( " Bye . " ) )
break;
}
}catch( I O E x c e p t i o n e ) {
System . o u t . p r i n t l n ( " E x c e p t i o nc a u g h twhent r y i n gt ol i s t e nonp o r t"
+ portNumber + " o rl i s t e n i n gf o rac o n n e c t i o n " ) ;
System . o u t . p r i n t l n ( e . getMessage ( ) ) ;
}
}
}
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THEKNOCKKNOCKPROTOCOLI
/
C o p y r i g h t ( c ) 1995 , 2008 , O r a c l e and / o r i t s a f f i l i a t e s . A l l r i g h t s r e s e r v e d .
R e d i s t r i b u t i o n and use i n s o u r c e and b i n a r y forms , w i t h o r w i t h o u t
m o d i f i c a t i o n , a r e p e r m i t t e d p r o v i d e d t h a t t h e f o l l o w i n g c o n d i t i o n s
a r e met :
R e d i s t r i b u t i o n s o f s o u r c e code must r e t a i n t h e above c o p y r i g h t
n o t i c e , t h i s l i s t o f c o n d i t i o n s and t h e f o l l o w i n g d i s c l a i m e r .
R e d i s t r i b u t i o n s i n b i n a r y f o r m must r e p r o d u c e t h e above c o p y r i g h t
n o t i c e , t h i s l i s t o f c o n d i t i o n s and t h e f o l l o w i n g d i s c l a i m e r i n t h e
d o c u m e n t a t i o n and / o r o t h e r m a t e r i a l s p r o v i d e d w i t h t h e d i s t r i b u t i o n .
N e i t h e r t h e name o f O r a c l e o r t h e names o f i t s
c o n t r i b u t o r s may be used t o endorse o r promote p r o d u c t s d e r i v e d
f r o m t h i s s o f t w a r e w i t h o u t s p e c i f i c p r i o r w r i t t e n p e r m i s s i o n .
THIS SOFTWARE I S PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS
I S " AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING , BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL ,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, DATA, OR
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THEKNOCKKNOCKPROTOCOLII
PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF
L I A B I L I T Y , WHETHER IN CONTRACT, STRICT L I A B I L I T Y , OR TORT ( INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN I F ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/
importj a v a . n e t .;
importj a v a . i o .;
p u b l i c c l a s sK n o c k K n o c k P r o t o c o l {
p r i v a t e s t a t i c f i n a l i n tWAITING = 0 ;
p r i v a t e s t a t i c f i n a l i n tSENTKNOCKKNOCK = 1 ;
p r i v a t e s t a t i c f i n a l i n tSENTCLUE = 2 ;
p r i v a t e s t a t i c f i n a l i n tANOTHER = 3 ;
p r i v a t e s t a t i c f i n a l i n tNUMJOKES = 5 ;
p r i v a t e i n ts t a t e = WAITING ;
p r i v a t e i n tc u r r e n t J o k e = 0 ;
p r i v a t eS t r i n g [ ] c l u e s = { " T u r n i p " , " L i t t l eOldLady " , " A t c h " , "Who" , "Who" } ;
p r i v a t eS t r i n g [ ] answers = { " T u r n i pt h eh e a t ,i t ' sc o l di nh e r e ! " ,
" Id i d n ' tknowyouc o u l dy o d e l ! " ,
" B l e s syou ! " ,
" I st h e r eano w li nh e r e ? " ,
" I st h e r eanechoi nh e r e ? " } ;
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THEKNOCKKNOCKPROTOCOLIII
p u b l i cS t r i n g p r o c e s s I n p u t ( S t r i n g t h e I n p u t ) {
S t r i n g t h e O u t p u t =n u l l;
i f( s t a t e == WAITING ) {
t h e O u t p u t = " Knock !Knock ! " ;
s t a t e = SENTKNOCKKNOCK;
}e l s e i f( s t a t e == SENTKNOCKKNOCK) {
i f( t h e I n p u t . e q u a l s I g n o r e C a s e ( "Who ' st h e r e ? " ) ) {
t h e O u t p u t = c l u e s [ c u r r e n t J o k e ] ;
s t a t e = SENTCLUE ;
}e l s e{
t h e O u t p u t = " You ' r esupposedt osay\ " Who ' st h e r e ? \ " !" +
" T r ya g a i n .Knock !Knock ! " ;
}
}e l s e i f( s t a t e == SENTCLUE) {
i f( t h e I n p u t . e q u a l s I g n o r e C a s e ( c l u e s [ c u r r e n t J o k e ] + "who? " ) ) {
t h e O u t p u t = answers [ c u r r e n t J o k e ] + "Wanta n o t h e r ?( y / n ) " ;
s t a t e = ANOTHER ;
}e l s e{
t h e O u t p u t = " You ' r esupposedt osay\ " " +
c l u e s [ c u r r e n t J o k e ] +
"who ? \ " " +
" !T r ya g a i n .Knock !Knock ! " ;
s t a t e = SENTKNOCKKNOCK;
}
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
THEKNOCKKNOCKPROTOCOLIV
}e l s e i f( s t a t e == ANOTHER) {
i f( t h e I n p u t . e q u a l s I g n o r e C a s e ( " y " ) ) {
t h e O u t p u t = " Knock !Knock ! " ;
i f( c u r r e n t J o k e == (NUMJOKES1 ) )
c u r r e n t J o k e = 0 ;
e l s e
c u r r e n t J o k e + + ;
s t a t e = SENTKNOCKKNOCK;
}e l s e{
t h e O u t p u t = " Bye . " ;
s t a t e = WAITING ;
}
}
r e t u r nt h e O u t p u t ;
}
}
Muhammad Adil Raja R.
The Knock Knock Protocol
Introduction
REFERENCES
The source code has been taken from
here.
This presentation has been produced with L
AT
E
X.
Berlin,beetle.
Muhammad Adil Raja R.
The Knock Knock Protocol