花了一週的時間去作這個實驗中間斷斷續續完成不一樣的部分,按照實驗過程來一步一步完成感受實驗流程仍是至關合理的編程
上圖就是最後的成品,其中包括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#在網絡編程方面的更多細節部分依然須要很長時間的學習與掌握,在實驗事後也有待自我學習與提高