本文的控制臺(tái)項(xiàng)目是根據(jù)supersocket官方telnet示例代碼進(jìn)行調(diào)試的,官方示例代碼:telnet示例。
開(kāi)始我的第一個(gè)telnet控制臺(tái)項(xiàng)目之旅:
創(chuàng)建控制臺(tái)項(xiàng)目:打開(kāi)vs程序,文件=》新建=》項(xiàng)目
一、下載supersocket的動(dòng)態(tài)庫(kù),主要有兩種方式獲取supersocket的動(dòng)態(tài)庫(kù)。
1、添加supersocket的dll文件(supersocket.common.dll, supersocket.socketbase.dll, supersocket.socketengine.dll)到此項(xiàng)目的引用,直接再官方網(wǎng)站上下載supersocket組件,引入需要dll文件即可:
2、通過(guò) nuget來(lái)獲取,本人也比較喜歡這種方式,可以更新組件版本。(注意:我這里使用的是vs2015可以直接打開(kāi)nuget,如果使用vs舊版本的同學(xué)需要下載nuget組件)
點(diǎn)擊瀏覽,輸入supersocket,勾選組件安裝即可
添加完成組件后需要注意將config文件進(jìn)行編譯成內(nèi)容,log4net需要使用config文件。
查看引入后的項(xiàng)目整體目錄,框紅線的為引入supersocket組件和文件
二、使用官方提供的啟動(dòng)服務(wù)器的代碼進(jìn)行測(cè)試服務(wù)啟動(dòng)和停止
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/// <summary> /// supersocket服務(wù)啟動(dòng)或停止 /// </summary> /// <param name="args"></param> static void main( string [] args) { console.writeline( "請(qǐng)按任何鍵進(jìn)行啟動(dòng)supersocket服務(wù)!" ); console.readkey(); console.writeline(); var appserver = new appserver(); //啟動(dòng)應(yīng)用服務(wù)端口 if (!appserver.setup(2017)) //啟動(dòng)時(shí)監(jiān)聽(tīng)端口2017 { console.writeline( "服務(wù)端口啟動(dòng)失敗!" ); console.readkey(); return ; } console.writeline(); //嘗試啟動(dòng)應(yīng)用服務(wù) if (!appserver.start()) { console.writeline( "服務(wù)啟動(dòng)失敗!" ); console.readkey(); return ; } console.writeline( "服務(wù)啟動(dòng)成功,請(qǐng)按'e'停止服務(wù)!" ); while (console.readkey().keychar != 'e' ) { console.writeline(); continue ; } //停止服務(wù) appserver.stop(); console.writeline( "服務(wù)已停止!" ); console.readkey(); } |
運(yùn)行項(xiàng)目:
運(yùn)行成功后可以查看debug文件夾下的logs日志跟蹤文件,從日志里面,我們可以看到服務(wù)器已經(jīng)能啟動(dòng)成功,但是這還沒(méi)有什么用,因?yàn)槲覀儾](méi)有處理客戶的鏈接進(jìn)來(lái),處理客戶的發(fā)送過(guò)來(lái)的信息。根據(jù)官方文檔,我們繼續(xù)拷貝代碼來(lái)完善我們的程序。
三、注冊(cè)客戶端鏈接和處理客戶端發(fā)送信息
1、處理客戶端連接,注冊(cè)回話新建事件處理方法
appserver.newsessionconnected += new sessionhandler(appserver_newsessionconnected);
2、在事件處理代碼中發(fā)送歡迎信息給客戶端
1
2
3
4
|
static void appserver_newsessionconnected(appsession session) { session.send( "welcome to supersocket telnet server!" ); } |
3、使用telnet客戶端進(jìn)行測(cè)試(注意:使用telnet必須先安裝telnet服務(wù))
安裝完成后,先運(yùn)行telnet服務(wù)器
進(jìn)行運(yùn)行win+r命令窗口cmd ,輸入telnet localhost 2017。(2017是開(kāi)始程序中偵聽(tīng)的端口)
回車(chē),顯示歡迎語(yǔ)說(shuō)明客戶端和服務(wù)器端進(jìn)行鏈接成功。
4、處理客戶端發(fā)送的信息,我繼續(xù)拷貝代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/// <summary> ///客戶端請(qǐng)求處理 /// </summary> /// <param name="session">會(huì)話</param> /// <param name="requestinfo">請(qǐng)求信息</param> static void appserver_newrequestreceived(appsession session, stringrequestinfo requestinfo) { switch (requestinfo.key.toupper()) { case ( "echo" ): session.send(requestinfo.body); break ; case ( "add" ): session.send(requestinfo.parameters.select(p => convert.toint32(p)).sum().tostring()); break ; case ( "mult" ): var result = 1; foreach (var factor in requestinfo.parameters.select(p => convert.toint32(p))) { result *= factor; } session.send(result.tostring()); break ; } } |
客戶端發(fā)送請(qǐng)求處理
5、注冊(cè)請(qǐng)求事件
1
|
appserver.newrequestreceived += new requesthandler<appsession, stringrequestinfo>(appserver_newrequestreceived); |
運(yùn)行效果:
除了使用telnet客戶端,網(wǎng)上還有一個(gè)tcp/udp的測(cè)試工具可以鏈接服務(wù)器
今天的supersocket框架的入門(mén)學(xué)習(xí)就到這里了,本人水平和文筆有限,有錯(cuò)誤的地方歡迎大家指正!
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持服務(wù)器之家!
原文鏈接:http://www.cnblogs.com/fly-bird/p/6298254.html