一共有三个题目,其中前两道分别考察了http、udp、tcp程序设计的内容,但是真的巨巨巨巨简单,只要你上课做过这个方面练习就绝对可以拿满分。
第二题原题是:TCP与UDP结合程序设计题
使用TCP协议的方式连接到服务器(给出了ip+端口信息),并根据服务器的提示信息完成其中给出的两小问)
第三题原题是:RMI程序设计题
这个题目是有关于rmi的,有一定的难度,需要思考,一次下面的内容着重说一下这个题目
(孩子临走前悄咪咪拍了最后有一题)
教师端提供一个别名为TeacherService的远程服务,运行在202.116195.71: 1099。请完成相关的RMI编程
(一)本程序涉及到两个远程服务接口TecherService和studentService,其定义见附录一,请仔细阅读接口定义,按要求创建两个接口
(二)实现studentService接口,并发布该远程服务,别名使用StudentService发布在1099端口(三)实现一个客户端程序,完成以下2个任务
(1)调用教师端的send方法发送 学号&姓名,如果匹配,获得第1问的8分
(2)调用教师端的send方法发送学号&姓名&我的RM服务器已经启动,教师端将调用你的远程服务getResult方法,如果实现正确,获得第2小问的6分。
附录
TeacherService和StudentService远程接口定义
package finaltest3.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
//远程银务接口:教师端和学生端各自部署一份,该口教师端实现
public inteace Teacherservice extends Remote{
//该远程方法由教随端实现,学生场调用
public String send(String msgToTeacher) throws RemoteException;
}
package finaltest3.rmi;
import java rmi Ramote;
import java.rmi.RenoteException;
//远程服务接口,教师端和学生端各自部署一份,该接口由学生端实现
public interface StudentService extends Remote{...}
解题
代码框架:rimi--StudentService.java StudentServiceImpl.java TeacherService.java
RmiStudentClientFX.java StudentServer.java
StudentService.java
package finaltest3.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface StudentService extends Remote {
int getResult(String msgFromTeacher) throws RemoteException;
}
StudentServiceImpl.java
package finaltest3.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class StudentServiceImpl extends UnicastRemoteObject implements StudentService{
public StudentServiceImpl() throws RemoteException {
}
@Override
public int getResult(String msgFromTeacher) throws RemoteException {
int result = 0;
if (msgFromTeacher.contains("#")) {
//max
String msg = msgFromTeacher.substring(2);
String[] numbers = msg.split("-");
for (String number:numbers
) {
int number_ = Integer.parseInt(number);
if (number_ > result) {
result = number_;
}
}
} else if (msgFromTeacher.contains("*")) {
//min
String msg = msgFromTeacher.substring(2);
String[] numbers = msg.split("-");
for (String number:numbers
) {
int number_ = Integer.parseInt(number);
if (number_ < result) {
result = number_;
}
}
}
return result;
}
}
TeacherService.java
package finaltest3.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TeacherService extends Remote {
public String send(String msgToTeacher) throws RemoteException;
}
RmiStudentClientFX.java
package finaltest3;
import finaltest3.rmi.TeacherService;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
/**
* description:
* author: Leslie Leung
* date: 2020/11/23
*/
public class RmiStudentClientFX extends Application {
private TextArea taDisplay = new TextArea();
private TextField tfMessage = new TextField();
private TextField tfStunum = new TextField();
private TextField tfName = new TextField();
Button btnSendMsg = new Button("发送消息");
Button btnSendStu = new Button("发送学号和姓名");
private TeacherService teacherService;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
VBox vBoxMain = new VBox();
vBoxMain.setSpacing(10);
vBoxMain.setPadding(new Insets(10, 20, 10, 20));
HBox hBox = new HBox();
hBox.setSpacing(10);
hBox.setPadding(new Insets(10, 20, 10, 20));
hBox.setAlignment(Pos.CENTER);
hBox.getChildren().addAll(new Label("输入信息:"), tfMessage,
btnSendMsg, new Label("学号:"), tfStunum, new Label("姓名:"), tfName, btnSendStu);
vBoxMain.getChildren().addAll(new Label("信息显示区:"),
taDisplay, hBox);
Scene scene = new Scene(vBoxMain);
primaryStage.setScene(scene);
primaryStage.show();
// TODO 启动时需要先启动服务器
//初始化rmi相关操作
new Thread(() -> {
rmiInit();
}).start();
btnSendMsg.setOnAction(event -> {
try {
taDisplay.appendText(teacherService.send(tfMessage.getText().trim()) + "\n");
tfMessage.clear();
} catch (RemoteException e) {
e.printStackTrace();
}
});
}
/**
* 初始化rmi相关操作
*/
public void rmiInit() {
try {
//(1)获取RMI注册器
Registry registry = LocateRegistry.getRegistry("202.116.195.71", 1099);
System.out.println("RMI远程服务别名列表:");
for (String name : registry.list()) {
System.out.println(name);
}
teacherService = (TeacherService) registry.lookup("TeacherService");
} catch (Exception e) {
e.printStackTrace();
}
}
}
StudentServer.java
package finaltest3;
import finaltest3.rmi.StudentService;
import finaltest3.rmi.StudentServiceImpl;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class StudentServer {
public static void main(String[] args) {
try{
Registry registry = LocateRegistry.createRegistry(1099);
StudentService studentService = new StudentServiceImpl();
registry.rebind("StudentService", studentService);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}