guessserver.java
来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 161 行
JAVA
161 行
import java.io.*;
import java.awt.*;
import java.applet.*;
import java.net.*;
// 和客户端建立一个猜数字游戏的服务
class GuessService extends AbstractConnection implements Runnable
{
// 要猜测的目标数字
private int number;
// 可能产生的数字的边界
private final int LOW = 1;
private final int HIGH = 1000;
// 在猜对了的时候输出的几个String
private final String[] EXCLAIMS =
{ "Wow", "Cool", "Great", "Sweet", "Excellent", "Neat" };
// 服务执行线程
private Thread exec;
// 用给定的Socket创建一个GuessService对象
public GuessService(Socket clientSocket)
{
super(clientSocket);
java.util.Random random = new java.util.Random();
// 产生一个介于LOW和HIGH之间的数字
do
{
number = Math.abs(random.nextInt());
} while(number < LOW || number > HIGH);
// 在服务器控制台打印要猜测的数字
System.out.println("I'm thinking about " + number + "...");
}
// 从EXCLAIMS数组产生一个随机字符串
public String getRandomExclaim()
{
java.util.Random r = new java.util.Random();
int index = Math.abs(r.nextInt()%EXCLAIMS.length);
return EXCLAIMS[index];
}
public void start()
{
exec = new Thread(this);
exec.start();
}
public void run()
{
// 打开连接
if(! open())
{
System.out.println("Could not open connection.");
return;
}
send("Prompt", "Enter a number between " + LOW + "and " + HIGH + ", or -1 to give up: ");
// 客户端的输入
String str = "";
// 所尝试的次数
int tries = 0;
Thread t = Thread.currentThread();
while(exec == t)
{
recv();
str = parseHeader();
// 看用户是否做出了猜测
if(str.equals("Guess"))
{
int n = 0; // 所猜的数字
++ tries;
try
{
n = Integer.parseInt(parseMessage());
}
catch(NumberFormatException e)
{
// 输入不是有效数字
send("Prompt", "Sorry, but you must guess a number! Try again: ");
}
// 判断用户是否只是放弃
if(n == -1)
{
send("Echo", "I'm sorry you gave up after " + tries + " tries! The number was " +
number + "!");
}
// 判断猜测是否正确
if(n == number)
{
send("Echo", getRandomExclaim() + "! You guessed correctly! And it only took you " +
tries + " tries!");
// 在终止服务前等待几秒
try
{
Thread.sleep(5000);
}
catch(InterruptedException e) { }
break;
}
// 否则数字不是小了就是大了
else if(n < number)
{
send("Prompt", "Sorry, try guessing higher: ");
}
else if(n > number)
{
send("Prompt", "Sorry, try guessing lower: ");
}
} // "Guess"
// 客户端不应该抛曲线球,所以接到无效消息头则退出
else
{
send("Echo", "I don't know what you mean; terminating connection");
return;
}
try
{
Thread.sleep(10);
}
catch(InterruptedException e) { }
}
// 终止服务
send("Echo", "Thanks for playing! Play again soon!");
send(END_OF_TRANSMISSION, "");
} // run
} // GuessService
// 一个简单的TCP连接服务器
public class GuessServer extends GUIServer
{
// 创建一个新的GuessService对象
protected void createService(Socket s)
{
new GuessService(s).start();
}
} // GuessServer
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?