隨著Internet的發(fā)展,越來(lái)越多的人加入到這個(gè)充滿無(wú)限生機(jī)的網(wǎng)絡(luò)世界中來(lái),作為一個(gè)網(wǎng)絡(luò)信息時(shí)代的專業(yè)電腦玩家,掌握網(wǎng)絡(luò)編程就顯得格外重要。本文通過(guò)一個(gè)MUD客戶端服務(wù)程序向您介紹了Internet網(wǎng)絡(luò)編程及MUD的一些知識(shí)。 MUD,全稱Multiple User Dungeon,意為多用戶"地牢"游戲,現(xiàn)在網(wǎng)蟲們一般都把它叫做泥巴。如果你已經(jīng)上了網(wǎng)的話,當(dāng)你得知了一個(gè)MUD的地址和端口后你便可以加入此MUD了,在Windows95操作系統(tǒng)下,你可以用 "telnet地址 端口" 這條命令來(lái)登錄到MUD,但是Windows95的telnet程序由于不是專門用來(lái)玩MUD的,因此使用起來(lái)非常不方便,這主要是由于telnet不能處理文字的回繞,并且因?yàn)檩斎胼敵鲈谕淮翱,造成輸入輸出信息混雜在一起,使用戶辨認(rèn)困難。歷史輸入的不能重用,大大增加了用戶的輸入量。而且在MUD中服務(wù)器傳給你的信息中有很多控制信息用來(lái)使輸出文字改變顏色或突出顯示,這些信息被telnet簡(jiǎn)單的忽略掉了,鑒于這些不便,有一些程序員開發(fā)了MUD客戶端服務(wù)程序,這些程序一般都具有這些功能: * 連接到MUD --- 這是基本功能 * 命令行歷史 --- 可重用以前的命令 * 宏命令 --- 以宏代替較長(zhǎng)的命令 * 輸入輸出窗口分開--- 避免輸入輸出信息混亂 * 輸出信息回卷 --- 允許查看以前的輸出信息 * 強(qiáng)調(diào)顯示 --- 能處理MUD系統(tǒng)傳來(lái)的控制序列 有一些還有更高級(jí)的功能: * 自動(dòng)登錄 --- 根據(jù)用戶歷史記錄,自動(dòng)登錄到MUD * 多重連接 --- 允許同時(shí)連接到多個(gè)MUD上,或同時(shí)在一個(gè)MUD上登錄多人 * 觸發(fā)裝置 --- 在某種情況下,自動(dòng)發(fā)出某命令 * 自動(dòng)導(dǎo)航系統(tǒng) --- 通過(guò)記錄east,west,south,north,up,down等命令,生成邏輯地圖,并可自動(dòng)導(dǎo)航用戶去某地 * 提供編程接口 --- 用戶可編程,制作機(jī)器人,代替用戶辛辛苦苦的在MUD上練功 Dos/Windows下的MUD客戶端服務(wù)程序主要有MUDCaller,BSXMUD等,其中以Zugg Software公司的ZMud較普及,也好用,下面我們用VB來(lái)做一個(gè)我們自己的MUD Client。 首先介紹一下Winsock控件。在VB中,利用 WinSock 控件可以與遠(yuǎn)程計(jì)算機(jī)建立連接,并通過(guò)用戶TCP或UDP協(xié)議進(jìn)行數(shù)據(jù)交換。這兩種協(xié)議都可以用來(lái)創(chuàng)建客戶與服務(wù)器應(yīng)用程序。在創(chuàng)建MUD客戶端時(shí),我們使用TCP協(xié)議。在給該控件的RemoteHost及RemotePort賦值后,調(diào)用其connect方法就可以連接到MUD主機(jī)上。然后用GetData和SendData就可以與MUD主機(jī)對(duì)話了。而從MUD主機(jī)傳來(lái)的數(shù)據(jù)是夾有escape控制字符串的ASCII文本,說(shuō)到escape控制字符串,需要解釋一下, 所謂escape控制字符串是ANSI中用于鍵盤控制和顯示控制的以escape(ASCII 27/0x1B)和'['開頭的一串字符,在MUD中一般只涉及到設(shè)置輸出屬性,在escape和'['后跟a1;a2;...'m',該串以字符m結(jié)束,a1,a2等是數(shù)字,意義如下: 0:恢復(fù)黑白顯示; 1:高亮度顯示 2:正常顯示 30...37:黑,紅,綠,黃,藍(lán),洋紅,青,白 如:chr(27)[1;31m表示從這里起用亮紅顯示,而chr(27)[2;37;0m表示恢復(fù)黑白顯示方式并用普通白色顯示。 現(xiàn)在我們打開VB,新建一個(gè)標(biāo)準(zhǔn)工程,選工程|部件菜單,加入Microsoft Winsock Control 5.0及Microsoft Rich TextBox Control 5.0這兩個(gè)控件到工具欄中。 將Form1改名為fMud,從工具欄拖一個(gè)CommandButton到fMud上,改名叫cmdSend,設(shè)置其default屬性為True。拖一個(gè)Rich TextBox到fMud上,改名叫MudOut,設(shè)置其Text屬性為空,ScrollBars為rtfBoth。再拖一個(gè)ComboBox到fMud上,改名叫MudIn,設(shè)置Text屬性為空。最后拖一個(gè)Winsock控件到fMud上,改名叫MudSock。.下一步是用菜單編輯器給fMud做一個(gè)菜單,其中有一個(gè)子菜單起名叫Connect,主窗口就做好了。 下面向工程里添加一個(gè)新Form,改名叫fConnect,用于接收用戶要聯(lián)往的MUD主機(jī)地址及端口。首先在上面放兩個(gè)Label,分別把Caption設(shè)為"MUD地址:" 和 "端口:",再放兩個(gè)TextBox分別起名叫tAddress和tPort,擺好位置,使兩個(gè)Label分別指向兩個(gè)TextBox,最后放一個(gè)CommandButton,使其Name=CmdConnect,Caption="&Connect",Default=True,Enabled=False。好了,下面開始編程: fMud窗口: fMud的定義部分: Dim bConnected as Boolean Connect菜單: If Not bConnected Then fConnect.Show 1 MudSock.Connect '連接到MUD主機(jī)上 bConnected = True MudIn.SetFocus End If fMud的Load事件: bConnected = False fMud的Resize事件: MudOut.Top = 0 '調(diào)整控件的位置就大小 MudOut.Left = 0 MudOut.Width = fMud.Width - 120 MudOut.Height = fMud.Height - 700 MudIn.Top = MudOut.Height+20 MudIn.Left = 0 MudOut.Width = fMud.Width - 120 MudSock的DataArrival事件: Dim strData As String If Connected Then MudSock.GetData strData '從MudSock的緩沖區(qū)中取數(shù)據(jù) MudOut.Text = MudOut.Text+strData MudOut.SelStart = len (MudOut.Text) If len(MudOut.Text) > 2000 Then '緩沖2000字的文本 MudOut.Text = Right (MudOut.Text,2000) End If Ene If cmdSend的Click事件: Dim s As String Dim i As Integer s = MudIn.Text + Chr(13) & Chr(10) '給命令行加上回車換行 fMud.MudSock.SendData s For i = 1 To MudIn.ListCount If MudIn.List(i) = MudIn.Text Then MudIn.RemoveItem (i) '刪去重復(fù)的歷史命令 End If Next i If MudIn.ListCount > 30 Then '緩沖30條歷史命令 MudIn.RemoveItem 0 End If MudIn.AddItem MudIn.Text '將本條命令加到歷史記錄最后 MudIn.SelStart = 0 MudIn.SelLength = Len(MudIn.Text) '本條命令文本被選擇,以便下 '輸入一條命令時(shí),不用擦除便可直接鍵入 fConnect窗口: tAddress和fPort的Change事件: If (tAddress.Text <> "") And (tPort.Text <> "") Then CmdConnect.Enabled = True Else CmdConnect.Enabled = False End If Connect按鈕的Click事件: fMud.MudSock.RemoteHost = tAddress.Text fMud.MudSock.RemotePort = CInt(tPort.Text) fConnect.Hide 好了,一個(gè)MUD客戶端服務(wù)程序就做好了,你現(xiàn)在已經(jīng)可以用它連接到MUD了。不過(guò)限于篇幅,現(xiàn)在本程序的功能只有輸出信息回卷,分開輸入輸出和重用歷史命令,它已比telnet玩MUD好用了。另外,要支持強(qiáng)調(diào)顯示功能,只需從MUD主機(jī)傳來(lái)的信息串中識(shí)別出escape'['控制串,并用RichTextBox的SelColor方法就可以設(shè)置文本顏色,這也是我們一開始為什么用RichTextBox而不用一般的TextBox的原因。最后指出,WinSock的Connect連接是否正確應(yīng)在MudSock的onError事件中編程,本程序略去。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!