計算機網(wǎng)絡(luò)課程設(shè)計- 編程實現(xiàn)telnet協(xié)議的基本功能_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  計算機與通信工程學(xué)院</p><p>  《計算機網(wǎng)絡(luò)》課程設(shè)計</p><p>  編程實現(xiàn)TELNET協(xié)議的基本功能</p><p> 專業(yè)名稱計算機科學(xué)與技術(shù)</p><p> 班級學(xué)號</p><p> 學(xué)生姓名</p><p> 指導(dǎo)教師</p>&

2、lt;p> 設(shè)計時間2013.6.24~2013.7.4</p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  專業(yè):計算機科學(xué)與技術(shù) 學(xué)號: 4100507 學(xué)生姓名:陳小軍</p><p>  小組題目:編程實現(xiàn)TELNET協(xié)議的基本功能</p><p>  1、 TELNET協(xié)議允許用戶

3、用一臺終端來訪問遠程的主機 ,它允許終端于主機之間以半雙工的方式交換信息,可參閱RFC864[6-13]。本次設(shè)計要求利用VB實現(xiàn)TELNET協(xié)議的基本功能 </p><p><b>  2、任務(wù)分工: </b></p><p> ?。?)、遠程主機設(shè)置(ubuntu);(羅琪)</p><p> ?。?)、設(shè)計原理分析,程序編寫,報告書寫;(

4、王志成)</p><p>  (3)、程序編寫、調(diào)試及截圖;(趙曉鵬)</p><p> ?。?)、程序編寫、調(diào)試及截圖。(陳小軍)</p><p><b>  設(shè)計時間與安排</b></p><p>  1、設(shè)計時間: 2周</p><p>  2、設(shè)計時間安排: 2013.6.24~2013.

5、7.7 </p><p>  熟悉實驗設(shè)備、收集資料: 3 天</p><p>  設(shè)計圖紙、實驗、計算、程序編寫調(diào)試: 8 天</p><p>  編寫課程設(shè)計報告: 2 天</p><p><b>  答辯: 1 天</b></p><p> ?。ㄒ唬┰O(shè)計題目:TELNET(遠程登錄)

6、協(xié)議</p><p><b> ?。ǘ┰O(shè)計要求:</b></p><p>  TELNET協(xié)議允許用戶用一臺終端來訪問遠程的主機 ,它允許終端于主機之間以半雙工的方式交換信息,可參閱RFC864[6-13]。本次設(shè)計要求利用VB實現(xiàn)TELNET協(xié)議的基本功能 </p><p><b> ?。ㄈ﹨f(xié)議介紹:</b><

7、/p><p><b>  3.1 簡介</b></p><p>  Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠程登陸服務(wù)的標準協(xié)議和主要方式。它為用戶提供了在本地計算機上完成遠程主機工作的能力。在終端使用者的電腦上使用telnet程序,用它連接到服務(wù)器。終端使用者可以在telnet程序中輸入命令,這些命令會在服務(wù)器上運行,就像直接在服務(wù)器的控制

8、臺上輸入一樣??梢栽诒镜鼐湍芸刂品?wù)器。要開始一個telnet會話,必須輸入用戶名和密碼來登錄服務(wù)器。Telnet是常用的遠程控制Web服務(wù)器的方法。</p><p><b>  3.2 登錄</b></p><p>  先來看看什么叫登錄:分時系統(tǒng)允許多個用戶同時使用一臺計算機,為了保證系統(tǒng)的安全和記賬方便,系統(tǒng)要求每個用戶有單獨的帳號作為登錄標識,系統(tǒng)還為每個

9、用戶指定了一個口令。用戶在使用該系統(tǒng)之前要輸入標識和口令,這個過程被稱為'登錄'?!∵h程登錄是指用戶使用Telnet命令,使自己的計算機暫時成為遠程主機的一個仿真終端的過程。仿真終端等效于一個非智能的機器,它只負責(zé)把用戶輸入的每個字符傳遞給主機,再將主機輸出的每個信息回顯在屏幕上。</p><p>  3.3 工作過程</p><p>  使用Telnet協(xié)議進行遠程登

10、錄時需要滿足以下條件:在本地計算機上必須裝有包含Telnet協(xié)議的客戶程序;必須知道遠程主機的Ip地址或域名;必須知道登錄標識與口令。 </p><p>  Telnet遠程登錄服務(wù)分為以下4個過程: </p><p>  1)本地與遠程主機建立連接。該過程實際上是建立一個TCP連接,用戶必須知道遠程主機的Ip地址或域名;</p><p>  2)將本地終端上輸入的

11、用戶名和口令及以后輸入的任何命令或字符以NVT(Net Virtual Terminal)格式傳送到遠程主機。該過程實際上是從本地主機向遠程主機發(fā)送一個IP數(shù)據(jù)包; </p><p>  3)將遠程主機輸出的NVT格式的數(shù)據(jù)轉(zhuǎn)化為本地所接受的格式送回本地終端,包括輸入命令回顯和命令執(zhí)行結(jié)果; </p><p>  4)最后,本地終端對遠程主機進行撤消連接。該過程是撤銷一個TCP連接。<

12、;/p><p><b>  3.4 基本概念</b></p><p>  telnet協(xié)議建立在三個主要的思想之上:</p><p><b>  虛擬終端</b></p><p><b>  選項協(xié)商方法</b></p><p><b>  通信雙

13、方地位對等</b></p><p>  3.4.1 NVT (網(wǎng)絡(luò)虛擬終端)</p><p>  Telnet使用網(wǎng)絡(luò)虛擬終端字符集來處理異構(gòu)系統(tǒng)的遠程登錄問題。網(wǎng)絡(luò)虛擬終端字符集是一個通用借口,通過該借口,Telent客戶端將來自本地終端的字符(數(shù)據(jù)或命令)轉(zhuǎn)換成NVT形式,然后交付網(wǎng)絡(luò)。而Telnet服務(wù)器講來自NVT形式的字符(數(shù)據(jù)或命令)轉(zhuǎn)換成計算機可接受的形式。&l

14、t;/p><p>  3.4.2 選項協(xié)商</p><p>  雙方在進行Telnet連接時,要進行選項協(xié)商.比如:使用字符方式 窗口的大小,終端的類型都要進行協(xié)商.而協(xié)商是通過TELNET所支持的命令來實現(xiàn)的.</p><p>  TELNET的常用命令(具體的見TCP/IP詳解P303):SE    240(F0) 

15、    子選項結(jié)束SB    250(FA)     子選項開始IAC   255(FF)     選項協(xié)商的第一個字節(jié)WILL  251(FB)     發(fā)送方激活選項(接收方同意激活選項)DO  &

16、#160; 253(FD)     接收方同意(發(fā)送方想讓接收方激活選項)WONT  252(FC)     接收方不同意DONT  254(FE)     接受方回應(yīng)WONT</p><p>  例如: “WILL X”表示“你是否同意我使用X 選項”</p>

17、;<p>  “DO X ”表示“我同意你使用X 選項”</p><p>  TELNET的常用選項代碼1(0x01)    回顯(echo)3(0x03)    抑制繼續(xù)進行(傳送一次一個字符方式可以選擇這個選項)24(0x18)   終端類型31(0x1F)   窗口大小32(0x20)

18、   終端速率33(0x21)   遠程流量控制34(0x22)   行方式36(0x24)   環(huán)境變量</p><p><b>  協(xié)商流程圖</b></p><p><b>  3.4.3 對稱性</b></p><p>  由于進

19、行選項協(xié)商的兩端是完全對稱的,任意一端都有可能將對方的確認命令當(dāng)成是請求命令而再次發(fā)出響應(yīng)命令,這樣就會造成協(xié)商過程的無限循環(huán)(loop)。因此為了避免循環(huán)的發(fā)生,協(xié)商過程應(yīng)遵循下面三個規(guī)則:</p><p>  只為選項的變化發(fā)出請求:</p><p>  接收到的請求如果要求進入已經(jīng)具有的狀態(tài),那么此請求將不被響應(yīng):</p><p>  當(dāng)一端向另一端發(fā)送一個協(xié)

20、商命令時,(不管這個命令是請求還是響應(yīng)命令),如果該選項的使用將影響到對方接受數(shù)據(jù)的處理,那么這個命令應(yīng)該被插入到該選項開始起作用的數(shù)據(jù)流的首部。</p><p>  3.5 Telnet命令格式:</p><p>  telnet [選項] 主機名(IP地址)</p><p><b>  選項包括:</b></p><

21、p>  -8  采用8位二進制傳輸</p><p>  -E  屏蔽所有的退出</p><p>  -L  使用8位二進制輸出</p><p><b>  -a  自動登錄</b></p><p>  -d  開關(guān)DEBUG信息,可從/usr/adm/syslog中

22、看到(UNIX)</p><p>  -e  [ESCAPE_CHAR]  設(shè)置退出字符</p><p>  -l  USER  自動登錄時作為用戶名</p><p><b>  常用命令</b></p><p><b>  help 聯(lián)機求助</b><

23、/p><p>  open后接IP地址或域名 即可進行遠程登錄</p><p>  close 正常結(jié)束遠程會話,回到命令方式</p><p>  display 顯示工作參數(shù)</p><p>  mode 進入行命令或字符方式</p><p>  send 向遠程主機傳送特殊字符(鍵入send?可顯示詳細字符)</

24、p><p>  set 設(shè)置工作參數(shù)(鍵入set?可顯示詳細參數(shù))</p><p>  status 顯示狀態(tài)信息</p><p>  toggle 改變工作參數(shù)(鍵入toggle?可顯示詳細參數(shù))</p><p>  ^]換碼符(escape character), 在異常情況下退出會話,回到命令方式</p><p> 

25、 quit退出telnet,返回本地機</p><p>  z使telnet進入暫停狀態(tài)</p><p>  <cr>;結(jié)束命令方式,返回telnet的會話方式</p><p> ?。ㄋ模崿F(xiàn)telnet協(xié)議</p><p>  using System;</p><p>  using System.Co

26、llections.Generic;</p><p>  using System.Linq;</p><p>  using System.Text;</p><p>  using System.Threading.Tasks;</p><p>  using System.Net;</p><p>  using

27、 System.Net.Sockets;</p><p>  using System.Collections;</p><p>  namespace telnet</p><p><b>  {</b></p><p>  class Program</p><p><b>  {&

28、lt;/b></p><p>  #region 定義一些變量</p><p>  /// <summary></p><p>  /// 定義一些標識符。</p><p>  /// </summary></p><p>  readonly Char IAC = Convert.ToC

29、har(255);//標識符,代表是一個TELNET指令</p><p>  readonly Char DO = Convert.ToChar(253);//表示一方要求另一方使用,或者確認你希望另一方使用指定的選項。</p><p>  readonly Char DONT = Convert.ToChar(254);// 表示一方要求另一方停止使用,或者確認你不再希望另一方使用指定的

30、選項。</p><p>  readonly Char WILL = Convert.ToChar(251);// 表示希望開始使用或者確認所使用的是指定的選項。。</p><p>  readonly Char WONT = Convert.ToChar(252);//表示拒絕使用或者繼續(xù)使用指定的選項</p><p>  readonly Char SB = C

31、onvert.ToChar(250);//表示后面所跟的是對需要的選項的子談判</p><p>  readonly Char SE = Convert.ToChar(240);//子談判參數(shù)的結(jié)束</p><p>  const Char IS = '0';</p><p>  const Char SEND = '1';</

32、p><p>  const Char INFO = '2';</p><p>  const Char VAR = '0';</p><p>  const Char VALUE = '1';</p><p>  const Char ESC = '2';</p>&l

33、t;p>  const Char USERVAR = '3';</p><p>  byte[] m_byBuff = new byte[100000];//流</p><p>  private ArrayList m_ListOptions = new ArrayList(); //收到的控制信息</p><p>  string m_st

34、rResp;//存儲準備發(fā)送的信息</p><p>  private Socket s;//一個套接字</p><p>  #endregion</p><p>  static void Main(string[] args)</p><p><b>  {</b></p><p>  Con

35、sole.Title = "telnet-4100507-chenxiaojun";</p><p>  // Console.BackgroundColor = ConsoleColor.Green;</p><p>  Console.ForegroundColor = ConsoleColor.Red;</p><p><b>

36、  //實例化這個對象</b></p><p>  Program p = new Program();</p><p>  //啟動socket進行telnet連接</p><p>  p.doSocket();</p><p><b>  }</b></p><p>  /// &

37、lt;summary></p><p>  /// 啟動scocket,進行telnet操作</p><p>  /// </summary></p><p>  private void doSocket()</p><p><b>  {</b></p><p>  Cons

38、ole.WriteLine("服務(wù)器端地址:");</p><p><b>  //輸入ip地址</b></p><p>  IPAddress import = IPAddress.Parse(Console.ReadLine());</p><p><b>  //獲得端口號</b></p&g

39、t;<p>  Console.WriteLine("服務(wù)器端口號:");</p><p>  int port =int.Parse(Console.ReadLine());</p><p>  //建立一個socket對象,使用ipv4,使用流進行連接,使用tcp/ip協(xié)議</p><p>  s =new Socket(Add

40、ressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp );</p><p>  //獲得一個連接地址對象(由ip地址和端口號構(gòu)成)</p><p>  IPEndPoint address =new IPEndPoint(import,port);</p><p>  //說明此socket不是出于阻止

41、模式</p><p>  s.Blocking=false;</p><p>  s.BeginConnect(address,</p><p>  delegate(IAsyncResult ar)</p><p><b>  {</b></p><p><b>  try</b

42、></p><p><b>  {</b></p><p>  //獲得傳入的對象(此處對象是beingconnect的第三個參數(shù))</p><p>  Socket sock1 =(Socket)ar.AsyncState;</p><p>  if(sock1.Connected)</p><

43、;p><b>  {</b></p><p>  AsyncCallback recieveData = new AsyncCallback(OnRecieveData);</p><p>  sock1.BeginReceive(m_byBuff,0,m_byBuff.Length,SocketFlags.None,recieveData,sock1);<

44、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  catch(Exception ex)</p><p><b>  {</b></p><p>  Console.WriteLine("初始化接收

45、信息出錯:"+ex.Message);</p><p><b>  }</b></p><p><b>  },s);</b></p><p>  //此處是為了發(fā)送指令不停的循環(huán) 發(fā)送要登錄的賬戶和密碼等。</p><p>  while (true)</p><p&

46、gt;<b>  {</b></p><p><b>  //發(fā)送讀出的數(shù)據(jù)</b></p><p>  DispatchMessage(Console.ReadLine ());</p><p>  //因為回車都沒有發(fā)送,在此處不上</p><p>  DispatchMessage("

47、;\r\n");</p><p><b>  }</b></p><p>  } // right</p><p>  /// <summary></p><p>  /// 當(dāng)接收完成后,執(zhí)行的方法</p><p>  /// </summary>

48、;</p><p>  /// <param name="ar"></param></p><p>  private void OnRecieveData(IAsyncResult ar)</p><p><b>  {</b></p><p>  //從參數(shù)中獲得給的soc

49、krt對象</p><p>  Socket sock =(Socket)ar.AsyncState;</p><p>  int nBytesRec =sock.EndReceive(ar);</p><p><b>  //如果有數(shù)據(jù)</b></p><p>  if (nBytesRec > 0)</p

50、><p><b>  {</b></p><p>  //講接收到的數(shù)據(jù)轉(zhuǎn)碼,順便轉(zhuǎn)成string 型</p><p>  string sReceive = Encoding.GetEncoding("utf-8").GetString(m_byBuff, 0, nBytesRec);</p><p>

51、  //聲明一個字符串,用來存貯解析過的字符串</p><p>  string m_strLine = "";</p><p>  for (int i = 0; i < nBytesRec; i++)</p><p><b>  {</b></p><p>  Char ch = Conve

52、rt.ToChar(m_byBuff[i]);</p><p>  switch (ch)</p><p><b>  {</b></p><p>  case '\r':</p><p>  m_strLine += Convert.ToString("\r\n");</p&g

53、t;<p><b>  break;</b></p><p>  case '\n':</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  m_strLine += Conve

54、rt.ToString(ch);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  try</b></p><p><

55、b>  {</b></p><p>  int strLinelen = m_strLine.Length;</p><p>  if (strLinelen == 0)</p><p><b>  {</b></p><p>  m_strLine = Convert.ToString("\

56、r\n");</p><p><b>  }</b></p><p>  //建立一個流,把接收的信息存進mToProcess中</p><p>  Byte[] mToProcess = new Byte[strLinelen];</p><p>  for (int i = 0; i < strLin

57、elen; i++)</p><p>  mToProcess[i] = Convert.ToByte(m_strLine[i]);</p><p>  //對接收的信息進行處理</p><p>  string mOutText = ProcessOptions(mToProcess);</p><p>  if (mOutText !=

58、"")</p><p>  Console.Write(mOutText);</p><p>  //接收完數(shù)據(jù),處理完字符串?dāng)?shù)據(jù)等一系列事物之后,開始回發(fā)數(shù)據(jù)</p><p>  RespondToOptions();</p><p><b>  }</b></p><p>

59、  catch (Exception ex)</p><p><b>  {</b></p><p>  throw new Exception("接收數(shù)據(jù)的時候出錯了!" + ex.Message);</p><p><b>  }</b></p><p><b> 

60、 }</b></p><p>  else// 如果沒有接收到任何數(shù)據(jù)的話</p><p><b>  {</b></p><p>  // 輸出 關(guān)閉連接</p><p>  Console.WriteLine("Disconnected", sock.RemoteEndPoint)

61、;</p><p>  // 關(guān)閉socket</p><p>  sock.Shutdown(SocketShutdown.Both);</p><p>  sock.Close();</p><p>  Console.Write("Game Over");</p><p>  Console.

62、ReadLine();</p><p><b>  }</b></p><p>  } //right</p><p>  /// <summary></p><p>  /// 發(fā)送數(shù)據(jù)的函數(shù)</p><p>  /// </summary></p>&

63、lt;p>  private void RespondToOptions()</p><p><b>  {</b></p><p><b>  try</b></p><p>  { //聲明一個字符串,來存儲 接收到的參數(shù) </p><p>  string strO

64、ption;</p><p>  for (int i = 0; i < m_ListOptions.Count; i++)</p><p><b>  {</b></p><p>  //獲得一個控制信息參數(shù)</p><p>  strOption = (string)m_ListOptions[i];</

65、p><p>  //根據(jù)這個參數(shù),進行處理</p><p>  ArrangeReply(strOption);</p><p><b>  }</b></p><p>  DispatchMessage(m_strResp);</p><p>  m_strResp = "";&

66、lt;/p><p>  m_ListOptions.Clear();</p><p><b>  }</b></p><p>  catch (Exception ers)</p><p><b>  {</b></p><p>  Console.WriteLine("

67、;錯錯了,在回發(fā)數(shù)據(jù)的時候 " + ers.Message);</p><p><b>  }</b></p><p><b>  } //right</b></p><p>  //解析接收的數(shù)據(jù),生成最終用戶看到的有效文字,同時將附帶的參數(shù)存儲起來</p><p>  private

68、string ProcessOptions(byte[] m_strLineToProcess)</p><p><b>  {</b></p><p>  string m_DISPLAYTEXT = "";</p><p>  string m_strTemp = "";</p><

69、;p>  string m_strOption = "";</p><p>  string m_strNormalText = "";</p><p>  bool bScanDone = false;</p><p>  int ndx = 0;</p><p>  int ldx = 0;&

70、lt;/p><p><b>  char ch;</b></p><p><b>  try </b></p><p><b>  {</b></p><p>  //把數(shù)據(jù)從byte[] 轉(zhuǎn)化成string</p><p>  for (int i

71、 = 0; i < m_strLineToProcess.Length; i++)</p><p><b>  {</b></p><p>  Char ss = Convert.ToChar(m_strLineToProcess[i]);</p><p>  m_strTemp = m_strTemp + Convert.ToStrin

72、g(ss);</p><p><b>  }</b></p><p>  //此處意義為,當(dāng)沒描完數(shù)據(jù)前,執(zhí)行掃描</p><p>  while (bScanDone != true)</p><p><b>  {</b></p><p>  int lensmk = m

73、_strTemp.Length;</p><p>  ndx = m_strTemp.IndexOf(Convert.ToString(IAC));</p><p>  if (ndx > lensmk) </p><p>  ndx = m_strTemp.Length; </p><p>  if (ndx !=

74、 -1)</p><p><b>  {</b></p><p><b>  #region </b></p><p>  // 將 標志位IAC 的字符 賦值給最終顯示文字 </p><p>  m_DISPLAYTEXT += m_strTemp.Substring(0, ndx);</p

75、><p>  // 此處獲得命令碼</p><p>  ch = m_strTemp[ndx + 1];</p><p>  if (ch == DO || ch == DONT || ch == WILL || ch == WONT)</p><p><b>  {</b></p><p>  m_

76、strOption = m_strTemp.Substring(ndx, 3); </p><p>  m_ListOptions.Add(m_strOption);</p><p>  // 將 標志位IAC 的字符 賦值給最終顯示文字 </p><p>  m_DISPLAYTEXT += m_strTemp.Substring(0, ndx);</p&g

77、t;<p>  string txt = m_strTemp.Substring(ndx + 3);</p><p>  m_strTemp = txt;</p><p><b>  }</b></p><p>  //如果IAC后面又跟了個IAC (255)</p><p>  else if (ch =

78、= IAC)</p><p><b>  {</b></p><p>  //則顯示從輸入的字符串頭開始,到之前的IAC 結(jié)束 </p><p>  m_DISPLAYTEXT = m_strTemp.Substring(0, ndx);</p><p>  //之后將處理過的字符串排除出去</p><

79、;p>  m_strTemp = m_strTemp.Substring(ndx + 1);</p><p><b>  }</b></p><p>  //如果IAC后面跟的是SB(250) </p><p>  else if (ch == SB)</p><p><b>  {</b>&

80、lt;/p><p>  m_DISPLAYTEXT = m_strTemp.Substring(0, ndx);</p><p>  ldx = m_strTemp.IndexOf(Convert.ToString(SE));</p><p>  m_strOption = m_strTemp.Substring(ndx, ldx);</p><p&

81、gt;  m_ListOptions.Add(m_strOption);</p><p>  m_strTemp = m_strTemp.Substring(ldx);</p><p><b>  }</b></p><p>  #endregion</p><p><b>  }</b></

82、p><p>  //若字符串里已經(jīng)沒有IAC標志位了</p><p><b>  else</b></p><p><b>  {</b></p><p>  m_DISPLAYTEXT = m_DISPLAYTEXT + m_strTemp;</p><p>  bScanDo

83、ne = true;</p><p><b>  }</b></p><p><b>  }</b></p><p>  m_strNormalText = m_DISPLAYTEXT;</p><p><b>  }</b></p><p>  cat

84、ch (Exception eP)</p><p><b>  {</b></p><p>  throw new Exception("解析傳入的字符串錯誤:" + eP.Message);</p><p><b>  }</b></p><p>  return m_strN

85、ormalText;</p><p><b>  }// right</b></p><p>  #region magic Function</p><p>  //解析傳過來的參數(shù),生成回發(fā)的數(shù)據(jù)到m_strResp</p><p>  private void ArrangeReply(string strOpti

86、on)</p><p><b>  {</b></p><p><b>  try</b></p><p><b>  {</b></p><p>  Char Verb; </p><p>  Char Option;</p><p

87、>  Char Modifier; </p><p>  Char ch; </p><p>  bool bDefined = false;</p><p>  if (strOption.Length < 3) return;</p><p>  Verb = strOption[1];</p><

88、;p>  Option = strOption[2];</p><p>  //如果選項碼為 回顯(1) 或者是抑制繼續(xù)進行(3)</p><p>  if (Option == 1 || Option == 3)</p><p><b>  {</b></p><p>  bDefined = true;<

89、/p><p><b>  }</b></p><p>  m_strResp += IAC;</p><p>  //如果選項碼為 回顯(1) 或者是抑制繼續(xù)進行(3) ==true</p><p>  if (bDefined == true)</p><p><b>  {</b&

90、gt;</p><p>  #region 繼續(xù)判斷</p><p>  if (Verb == DO)</p><p><b>  {</b></p><p>  ch = WILL; </p><p>  m_strResp += ch; </p><p>  m_st

91、rResp += Option; </p><p><b>  }</b></p><p>  if (Verb == DONT)</p><p><b>  {</b></p><p>  ch = WONT; </p><p>  m_strResp += ch;

92、</p><p>  m_strResp += Option; </p><p><b>  }</b></p><p>  if (Verb == WILL)</p><p><b>  {</b></p><p><b>  ch = DO;</b>

93、</p><p>  m_strResp += ch; </p><p>  m_strResp += Option;</p><p><b>  }</b></p><p>  if (Verb == WONT)</p><p><b>  {</b></p>

94、<p>  ch = DONT; </p><p>  m_strResp += ch; </p><p>  m_strResp += Option;</p><p><b>  }</b></p><p>  if (Verb == SB)</p><p><b&g

95、t;  {</b></p><p>  Modifier = strOption[3];</p><p>  if (Modifier == SEND)</p><p><b>  {</b></p><p><b>  ch = SB;</b></p><p>

96、  m_strResp += ch;</p><p>  m_strResp += Option;</p><p>  m_strResp += IS;</p><p>  m_strResp += IAC;</p><p>  m_strResp += SE;</p><p><b>  }</b&g

97、t;</p><p><b>  }</b></p><p>  #endregion</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p>

98、;<p>  #region 底下一系列代表,無論你發(fā)那種請求,我都不干</p><p>  if (Verb == DO)</p><p><b>  {</b></p><p>  ch = WONT;</p><p>  m_strResp += ch;</p><p>  m

99、_strResp += Option;</p><p><b>  }</b></p><p>  if (Verb == DONT)</p><p><b>  {</b></p><p>  ch = WONT;</p><p>  m_strResp += ch;

100、</p><p>  m_strResp += Option;</p><p><b>  }</b></p><p>  if (Verb == WILL)</p><p><b>  {</b></p><p>  ch = DONT; </p><p

101、>  m_strResp += ch; </p><p>  m_strResp += Option;</p><p><b>  }</b></p><p>  if (Verb == WONT)</p><p><b>  {</b></p><p>  ch

102、= DONT;</p><p>  m_strResp += ch; </p><p>  m_strResp += Option;</p><p><b>  }</b></p><p>  #endregion</p><p><b>  }</b></p>

103、;<p><b>  }</b></p><p>  catch (Exception eeeee)</p><p><b>  {</b></p><p>  throw new Exception("解析參數(shù)時出錯:" + eeeee.Message);</p><

104、p><b>  }</b></p><p>  } // 括號無措</p><p>  void DispatchMessage(string strText)</p><p><b>  {</b></p><p><b>  try</b></

105、p><p><b>  {</b></p><p>  //申請一個與字符串相當(dāng)長度的char流 </p><p>  Byte[] smk = new Byte[strText.Length];</p><p>  for (int i = 0; i < strText.Length; i++)</p>

106、<p><b>  {</b></p><p>  //解析字符串,將其存儲到char流中去</p><p>  Byte ss = Convert.ToByte(strText[i]);</p><p>  smk[i] = ss;</p><p><b>  }</b></p&

107、gt;<p>  IAsyncResult ar2 = s.BeginSend(smk, 0, smk.Length, SocketFlags.None, delegate(IAsyncResult ar)</p><p><b>  {</b></p><p>  Socket sock1 = (Socket)ar.AsyncState;</p&

108、gt;<p>  if (sock1.Connected)</p><p><b>  {</b></p><p>  AsyncCallback recieveData = new AsyncCallback(OnRecieveData);</p><p>  sock1.BeginReceive(m_byBuff, 0, m_

109、byBuff.Length, SocketFlags.None, recieveData, sock1);</p><p><b>  }</b></p><p><b>  },s );</b></p><p>  s.EndSend(ar2);</p><p><b>  }</

110、b></p><p>  catch(Exception ers)</p><p><b>  {</b></p><p>  Console.WriteLine("出錯了,在回發(fā)數(shù)據(jù)的時候:" + ers.Message);</p><p><b>  }</b><

111、/p><p><b>  }</b></p><p>  #endregion</p><p><b>  }</b></p><p><b>  }</b></p><p><b> ?。ㄎ澹?實驗截圖</b></p>

112、<p>  5.1 先知道遠程主機的IP地址:</p><p>  5.2windows下 telnet命令登錄遠程主機:</p><p><b>  5.3 登錄成功</b></p><p>  5.4 執(zhí)行一些操作</p><p>  5.5 遠程主機相應(yīng)的變化</p><p> 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論