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