花了一周的时间去做这个实验中间断断续续完成不同的部分,按照实验过程来一步一步完成感觉实验流程还是相当合理的
上图就是最后的成品,其中包括
JudgeCilent客户端
完成部分:
1、可以提供五种测试状态的显示,包括网络异常,编译失败,输入错误(超时),结果错误,接受,五个状态
2、可以对无输入程序进行测试
3、可修改ip地址与端口
可提高部分:
1、由于该程序只是辅助测试服务器的使用的,所以并没有做一下界面的优化比如线程运行优化来避免等待服务器返回时界面不响应的现象
JudgeServer服务器
完成部分:
1、错误处理,并测试在判题过程的几种意外下能正常运行,以及客户端无连接后会在30秒超时时主动断开连接避免系统空连接过多造成的系统开销
2、多线程处理,在并发速度为10ms一次连接下,并且带有不同的错误情况下,系统依然能正确运行,高并发下测试判题并没有错误
可提高部分:
1、服务器与客户端的交互仍有不完善的地方,一是不方便拓展,一旦服务器修改,客户端必须进行修改,因为数据是按照一定规则分次发送的,而不是结构化一次性发送
2、暂时没有提供自定义的监听端口与gcc编译程序地址与test编译测试工作目录,这里通过相对地址也就是如图的两个文件夹存放,监听地址固定为8080而没有设置成运行时确定
CompileTest编译类库
完成部分:
1、编译与测试输入输出结果,无输入则通过\r\n来表示
2、超时机制,可定义超时时间
3、异常处理,在任何异常下保证系统不会出现不受控制的子进程
可提高部分:
1、通过windows api完善编译过程的信息反馈,包括内存,编译运行时长等
由于c#语言跟系统高度结合与封装大量的功能,所以实现起来并不是很复杂,像是socket的超时只需要一两个语句即可控制,也是非常简单方便,当然要实现更多的底层功能就需要掌握更多c#语言
这短暂时间的练习仅仅能掌握一些简单的c#语言,要想更深一步完善系统可能需要更仔细的掌握c#的一些深层次的用法
通过这次实验,我掌握了c#的socket编程,简单的多线程编程,以及c#调用外部exe程序的编程,另外对http以及cgi也有一定的理解与体会,掌握了较多未接触的新知识,但是还是比较简单的理解,如果真的要摸透c#在网络编程方面的更多细节部分依然需要很长时间的学习与掌握,在实验过后也有待自我学习与提升