2023年GDUFS互联网程序设计期末考试题目

一共有三个题目,其中前两道分别考察了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();
        }
    }
}

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tsuyt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值