ServerThread.java
package ServerPart;
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerThread {
private Socket connectToClient;
private DataOutputStream outToClient;
private DataInputStream inFromClient;
private ReadTestFile readTestFile;
private String selectedAnswer = "";
public ServerThread(Socket socket){
connectToClient = socket;
try{
readTestFile = new ReadTestFile();
inFromClient = new DataInputStream(connectToClient.getInputStream());
outToClient = new DataOutputStream(connectToClient.getOutputStream());
}
catch(IOException e){
}
//start();
}
private void socketClosing(){
try{
inFromClient.close();
outToClient.close();
connectToClient.close();
}
catch(Exception e){
System.out.println("关闭socket异常!");
}
}
public void run(){
String inStr = "";
String outStr = "";
while(true){
try{
//sleep(10);//线程休眠10毫秒;
inStr = inFromClient.readUTF();
if(inStr.startsWith("开始考试")){
int time = readTestFile.getTestTime();
outToClient.writeUTF("考试时间@"+time);
System.out.println(inStr);
}
if(inStr.startsWith("下一题")){
outStr = readTestFile.getTestQuestion();
outToClient.writeUTF("下一题@"+outStr);
}
else if(inStr.startsWith("提交答案")){
inStr = inStr.substring(inStr.indexOf("@")+1);
selectedAnswer += inStr;
}
else if(inStr.startsWith("成绩")){
int score = getTestScore();
if(score>=60)
outStr = "成绩:"+score+"\n祝贺你通过考试!";
else
outStr = "成绩:"+score+"\n你没有通过考试!";
outToClient.writeUTF(outStr);
saveTestScore("testscore.txt","成绩\t"+score);
System.out.println(outStr);
}
}
catch(IOException e){
socketClosing();
System.out.println("与客户的连接中断");
break;
}
}
}
private int getTestScore(){
String correctAnswer = readTestFile.getCorrectAnswer();
int n = 0,testScore = 0;
int length1 = correctAnswer.length();
int length2 = selectedAnswer.length();
int min = Math.min(length1,length2);
for(int i=0;i<min;i++){
if(selectedAnswer.charAt(i)==correctAnswer.charAt(i))
n++;
}
testScore=(int)(100.0*n/length1);
return testScore;
}
private void saveTestScore(String file,String score){
try{
BufferedWriter scoreFile = new BufferedWriter(new FileWriter(file,true));
String name = connectToClient.getInetAddress().toString();
scoreFile.write(name+"\t");
scoreFile.write(score);
scoreFile.newLine();
scoreFile.flush();
scoreFile.close();
}
catch(IOException e){
System.out.println("写成绩到文件发生异常!");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
ReadTestFile.java
package ServerPart;
import java.io.*;
public class ReadTestFile {
private BufferedReader bufReader;
public int testTime;
private String correctAnswer;
public ReadTestFile()throws IOException{
bufReader = new BufferedReader(new FileReader("test.txt"));
String s = bufReader.readLine();
int i1 = s.indexOf('@');
int i2 = s.indexOf("分钟");
s = s.substring(i1+1,i2);
testTime = Integer.parseInt(s)*60*1000;
s = bufReader.readLine().trim();
correctAnswer = s.substring(s.indexOf('@'+1));
}
public int getTestTime(){
return testTime;
}
public String getCorrectAnswer(){
return correctAnswer;
}
public String getTestQuestion(){
String testQuestion = "";
try{
StringBuffer temp = new StringBuffer();
String s = "";
if(bufReader!=null){
while((s=bufReader.readLine())!=null){
if(s.startsWith("*"))
break;
temp.append("\n"+s);
if(s.startsWith("试题结束"));
bufReader.close();
}
}
testQuestion = temp.toString();
}
catch(Exception e){
testQuestion = "试题结束";
}
return testQuestion;
}
public static void main(String args[]){
}
}
MultiServer.java
package ServerPart;
import java.io.*;
import java.net.*;
public class MultiServer {
public static void main(String[] args)throws IOException {
System.out.println("建立并等待连接……");
ServerSocket serverSocket = new ServerSocket(5500);
Socket connectToClient = null;
while(true){
connectToClient = serverSocket.accept();
new ServerThread(connectToClient);
}
}
}
test.txt
考试用时@1分钟
标准答案@DB
1.下面关于类的说法不正确的是( )。
A)类是Java语言中的一种复合数据类型。
B)类中包含数据变量和方法。
C)类是对所有具有一定共性的对象的抽象。
D)Java语言的类支持多继承。
************
试题结束
评论