📄 vxcv.java
字号:
import java.net.*;
import java.io.*;
class KKState{
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 Stringclues={″Tumip″,″Little Old Lady″,″Atch″,″Who″;″Who″};
private Stringanswers={″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?″};
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;
}
}
//服务器程序
class KnockKnockServer{
public static void main(String[]args){
ServerSocket serverSocket=null;
try {
serverSocket=new ServerSocket(4444);// 创建服务器端socket
}catch(IOException e){
System.out.println(″Could not listen on port:″+4444+″,″+e;
System.exit(1);
}
Socket clientSocket=null;
try{
clientSocket=serverSocket.accept();//监听申请连接到该socket的要求并建立连接
}catch(IOException e){
System.out.println(″Accept failed:″+4444+″,″+e);
System.exit(1);
}
try{
//通过客户端socket,获取输入数据流对象,通过它可以读入客户端输入的信息
//通过客户端socket,获取输出数据流对象,通过它可以向客户端输入的信息
DataInputStream is=new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
PrintStream os=new PrintStream(new BufferedOutputStream(clientSocket.getOutputStream(),1024),false);
//KKState类用于处理输入的会话信息,然后返回设定好的回答
KKState kks=new KKState():
String inputLine,outputLine;
outputLine=kks.processInput(null);
os.println(outputLine);//第一次运行,输入参数为null,kks返回:″Knock!Knock!″;然后向客户端写入。
0s.flush();
//如果客户端没有输入,readLine将阻塞;如果客户端关闭,readLine返回为null。
//在下面循环语句中,以读一行,再写一行的方式与客户交互。
while((inputLine=is.readLine())!=null){
outputLine=kks.processInput(inputLine);
os.println(outputLine);
os.flush();
if(outputLine.equals(″Bye.″))break;
}
//以下完成清除工作。
os.close();
is.close();
clientSocket.close();
serverSocket.close();
} catch(IOException e){
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -