版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
多媒體與網絡第1頁,課件共62頁,創(chuàng)作于2023年2月第11章多媒體與網絡第2頁,課件共62頁,創(chuàng)作于2023年2月11.1.1媒體播放器概述
1.媒體播放器
MultimediaMCI控件管理媒體控制接口(MCI)設備上多媒體文件的錄制與回放。實際上,這種控件是一組按鈕,用來向諸如聲卡、MIDI序列發(fā)生器、CD-ROM驅動器、視頻CD播放器、視頻磁帶記錄器及播放器等設備發(fā)出MCI命令。MCI控件還支持Windows(*.avi)視頻文件的回放。要在VB工程中使用MultimediaMCI控件,需要在菜單上選擇“工程→部件”選項,在“部件”對話框的“控件”選項卡中找到項,添加到工程中。添加后,在工具箱中將出現(xiàn)圖標。設計時,將MultimediaMCI控件添加到一個窗體上,如圖11-1所示圖11-1MultimediaMCI控件添加到窗體上第3頁,課件共62頁,創(chuàng)作于2023年2月將按鈕分別定義為Prev(上一首)、Next(下一首)、Play(播放)、Pause(暫停)、Back(后退)、Step(步進)、Stop(停止)、Record(錄音)和Eject(彈出)。需要使用或顯示某幾個按鈕時,可以將其中的按鈕屬性Visible和Enabled設置為True;否則,設置其屬性值為false。第4頁,課件共62頁,創(chuàng)作于2023年2月2.主要屬性(1)Command屬性:指定將要執(zhí)行的MCI
命令。語法:Command[=cmdstring$]說明:參數(shù)cmdstring$給出了將要執(zhí)行的MCI命令的名稱:Open、Close、Play、Pause、Stop、Back、Step、Prev、Next、Seek、Record、Eject、Sound或Save。這些命令被立即執(zhí)行,并將錯誤代碼存放在Error屬性中。表11-1描述了所有的命令及其使用的屬性。如果沒有對某個屬性進行設置,它既可以使用默認值(給出在屬性名后的括號中),也有可能不使用該屬性(沒有列出默認值)。命令描述/所用的屬性Open使用MCI_OPEN命令打開一設備。Notify(False)Wait(True)SharableDeviceTypeFileNameClose使用MCI_CLOSE命令關閉一設備。第5頁,課件共62頁,創(chuàng)作于2023年2月續(xù)表Notify(False)Wait(True)Play使用MCI_PLAY命令播放一設備。Notify(True)Wait(False)FromToPause使用MCI_PAUSE命令暫停播放或記錄。如果在設備已經暫停時執(zhí)行這一命令,使用MCI_RESUME命令重新開始播放或記錄。Notify(False)Wait(True)Stop使用MCI_STOP命令停止播放或記錄。Notify(False)Wait(True)Back使用MCI_STEP命令向后單步。Notify(False)Wait(True)Frames第6頁,課件共62頁,創(chuàng)作于2023年2月續(xù)表Step使用MCI_STEP命令向前單步。Notify(False)Wait(True)FramesPrev使用Seek命令定位到當前曲目的開始部分。如果在上一次Prev命令之后三秒之內再次執(zhí)行這一命令,那么就定位到上一個曲目的開始部分,如果已經處在第一個曲目內,那么就只是定位到第一個曲目的開始部分。第7頁,課件共62頁,創(chuàng)作于2023年2月命令描述/所用的屬性Notify(False)Wait(True)Next使用Seek命令定位到下一個曲目的開始部分(如果已經處在最后一個曲目內,那么就定位到最后一個曲目的開始部分)。Notify(False)Wait(True)Seek如果沒有進行播放,那么就使用MCI_SEEK命令搜索一個位置。如果播放正在進行,那么就使用MCI_PLAY命令從給定位置開始繼續(xù)播放。Notify(False)Wait(True)ToRecord使用MCI_RECORD命令進行記錄。續(xù)表第8頁,課件共62頁,創(chuàng)作于2023年2月Notify(True)Wait(False)FromToRecordmode(0–Insert)Eject使用MCI_SET命令將媒體彈出。Notify(False)Wait(True)Sound使用MCI_SOUND命令播放聲音。Notify(False)Wait(False)FileNameSave使用MCI_SAVE命令保存打開的文件。Notify(False)Wait(True)FileName續(xù)表第9頁,課件共62頁,創(chuàng)作于2023年2月其中:1)DeviceType屬性:指定要打開的MCI設備的類型。語法:DeviceType[=device$]
說明:參數(shù)device$是要打開的MCI設備的類型,例如:AVIVideo、CDAudio、DAT、DigitalVideo、MMMovie、其它、Overlay、掃描儀、序列發(fā)生器、VCR、視盤或WaveAudio。打開簡單設備(如不使用文件的音頻CD)時,該屬性必須設置。如果文件的擴展名沒有指定將要使用的設備,打開復雜MCI設備時也必須設置該屬性。2)Wait屬性:決定MultimediaMCI控件是否要等到下一條MCI命令完成,才能將控件返回應用程序。在設計時,該屬性不可用。對該屬性賦值時,只對下一條MCI命令有效。后面的MCI命令會一直忽略Wait屬性,除非用另外一個值(不同的或可標識的)為它賦值。第10頁,課件共62頁,創(chuàng)作于2023年2月3)Sharable屬性:決定多個程序能否共享同一臺MCI設備。若取值為False,表示其它控件或應用程序不能訪問這臺設備;若取值為True,表示多個控件或應用程序能夠打開這臺設備。4)Notify屬性:決定下一條MCI命令是否使用MCI通知服務。如果被設置為True,則Notify屬性在下一條MCI命令完成時產生一個回調事件(Done)。設計時該屬性不可用。(2)UpdateInterval屬性:規(guī)定兩次連續(xù)的StatusUpdate事件之間的毫秒數(shù)。語法:UpdateInterval[=milliseconds%]
說明:參數(shù)milliseconds%規(guī)定事件之間的毫秒數(shù)。如果毫秒數(shù)是0,表明沒有StatusUpdate事件發(fā)生。第11頁,課件共62頁,創(chuàng)作于2023年2月3.主要事件(1)StatusUpdate事件(MultimediaMCI控件):按UpdateInterval屬性給定的時間間隔自動地發(fā)生。語法:PrivateSubMMControl_StatusUpdate()
說明:該事件允許應用程序更新顯示,以通知用戶當前MCI設備的狀態(tài)。應用程序可以從Position、Length和Mode等屬性中獲得狀態(tài)信息。(2)Done事件:當Notify
屬性為True的MCI
命令結束時發(fā)生。語法:PrivateSubMMControl_Done(NotifyCodeAsInteger)
說明:參數(shù)NotifyCode表示MCI命令是否成功??梢允潜?1-2中的任意設置值。第12頁,課件共62頁,創(chuàng)作于2023年2月表11-2參數(shù)NotifyCode的設置值值設置值/Result1mciSuccessful命令成功的執(zhí)行。2mciSuperseded命令被其它命令所替代。4mciAborted命令被用戶中斷。8mciFailure命令失敗。第13頁,課件共62頁,創(chuàng)作于2023年2月11.1.2簡單媒體播放器
[例11-1]制作播放WAVMP3mid等音頻文件的播放器。[分析]播放文件一般步驟:設置設備打開的屬性;指定播放文件;打開設備,開始播放;播放完畢,關閉設備。[建立工程]新建窗體,命名為frmWAV。向窗體添加一個MCI控件,一個通用對話框控件,四個按鈕,五個label控件,一個文本框控件,界面布局如圖11-2所示。Text1cmdOpenCommonDialog1MMControl1cmdPlaycmdPausecmdCloseLabel2
Label3圖11-2界面布局第14頁,課件共62頁,創(chuàng)作于2023年2月[程序代碼]’打開文件按鈕代碼PrivateSubcmdOpen_Click()'未打開文件前,讓播放\暫停\關閉按鈕不可用
cmdPlay.Enabled=FalsecmdPause.Enabled=FalsecmdClose.Enabled=False'選擇文件對話框
CommonDialog1.DialogTitle="選擇播放文件"CommonDialog1.Filter="*.wav|*.wav|*.mid|*.mid|*.mp3|*.mp3"CommonDialog1.FileName=""CommonDialog1.ShowOpen
'如果選擇了文件,則設置MCI屬性
IfCommonDialog1.FileName<>""ThenText1.Text=CommonDialog1.FileName第15頁,課件共62頁,創(chuàng)作于2023年2月
'打開文件前,先停止上一次的播放
MMControl1.Command="close"
MMControl1.FileName=Text1.TextMMControl1.DeviceType=""MMControl1.Command="open"
'顯示文件播放長度
Label2.Caption=ToHMS(MMControl1.Length)
'出發(fā)StatusUpdate事件,在該事件中,得到當前播放進度
MMControl1.UpdateInterval=100
cmdPlay.Enabled=TrueEndIfEndSub'開始播放PrivateSubcmdPlay_Click()MMControl1.Command="play"cmdPlay.Enabled=FalsecmdPause.Enabled=TruecmdClose.Enabled=TrueEndSub第16頁,課件共62頁,創(chuàng)作于2023年2月'暫停播放PrivateSubcmdPause_Click()MMControl1.Command="pause"
cmdPlay.Enabled=TruecmdPause.Enabled=FalsecmdClose.Enabled=TrueEndSub'停止播放PrivateSubcmdClose_Click()MMControl1.Command="close"
cmdPlay.Enabled=FalsecmdPause.Enabled=FalsecmdClose.Enabled=FalseEndSub'顯示播放進度PrivateSubMMControl1_StatusUpdate()Label3.Caption=ToHMS(MMControl1.Position)第17頁,課件共62頁,創(chuàng)作于2023年2月'播放完畢,循環(huán)播放
IfMMControl1.Position>=MMControl1.LengthThenMMControl1.Command="prev"MMControl1.Command="play"EndIfEndSub'轉換為時分秒格式FunctionToHMS(TsAsLong)AsStringTs=Ts/1000hh=Ts\3600mm=(TsMod3600)\60ss=(TsMod3600)Mod60
ToHMS=Format(hh,"00")&";"&Format(mm,"00")&";"&Format(ss,"00")EndFunction第18頁,課件共62頁,創(chuàng)作于2023年2月[運行結果]單擊“打開文件”按鈕,選擇MAVMID或MP3文件后,“播放”按鈕可用;單擊“播放”按鈕,label3將顯示播放進度;控制“暫?!被颉巴V埂卑粹o,實現(xiàn)相應的操作。顯示效果如圖11-3所示。一般情況下,如果要使用自定義按鈕代替MCI操作按鈕,MCI控件應將Visible屬性設置為false,讓其不可見。圖11-3播放器運行結果第19頁,課件共62頁,創(chuàng)作于2023年2月11.1.3錄音與放音
[例11-2]通過電腦麥克風錄制聲音文件,保存到本機,并回放該文件。[分析]錄制文件的一般步驟如下:設置設備打開的屬性;指定錄制文件保存的位置;打開設備,開始錄制;錄制完畢,保存文件;關閉設備。使用MultimediaMCI控件記錄音頻信號之前,應打開一個新的文件,以保證記錄聲音的數(shù)據文件格式與系統(tǒng)記錄格式完全兼容。關閉MCI設備前,應該發(fā)出MCISave命令,把記錄的數(shù)據保存到文件中去。第20頁,課件共62頁,創(chuàng)作于2023年2月[建立工程]添加窗體frmRec,向窗體添加MCI控件及四個按鈕控件,分別命名為cmdRec、cmdPause、cmdSave和cmdPlay,如圖11-4所示。[程序代碼]'開始錄音PrivateSubcmdRec_Click()MMControl1.Wait=TrueMMControl1.DeviceType="WaveAudio"MMControl1.FileName="c:\myRec.wav"'必須先設置文件名
MMControl1.Command="open"MMControl1.Command="Record"EndSub'暫停和繼續(xù)錄音PrivateSubcmdPause_Click()IfcmdPause.Caption="暫停錄音"ThencmdPause.Caption="繼續(xù)錄音"MMControl1.Command="pause"ElsecmdPause.Caption="暫停錄音"MMControl1.Command="Record"EndIfEndSub第21頁,課件共62頁,創(chuàng)作于2023年2月'保存錄制的文件PrivateSubcmdSave_Click()MMControl1.Command="Save"MMControl1.Command="Close"EndSub'回放錄音文件PrivateSubcmdPlay_Click()MMControl1.Wait=TrueMMControl1.DeviceType="WaveAudio"MMControl1.FileName="c:\myRec.wav"MMControl1.Command="open"MMControl1.Command="play"EndSubcmdReccmdPausecmdSavecmdPlayMMControl1圖11-4界面布局
[運行結果]如圖11-5所示。第22頁,課件共62頁,創(chuàng)作于2023年2月[運行結果]如圖11-5所示。圖11-5運行結果。為代碼簡單起見,未對按鈕之間的操作邏輯進行控制。請讀者完善例11-2第23頁,課件共62頁,創(chuàng)作于2023年2月11.2Internet傳輸控件
1.Internet傳輸控件InternetTransfer控件(以下簡稱稱inet控件)支持超文本傳輸協(xié)議(HTTP)和文件傳輸協(xié)議(FTP),它們是Internet網上使用最廣泛的兩種協(xié)議。使用HTTP協(xié)議可以連接全球信息網(WorldWideWeb)服務器,以檢索HTML文檔。使用FTP協(xié)議可以在FTP服務器上登錄,以下載和加載文件。UserName和Password屬性可讓用戶在要求驗證身份的私有服務器上登錄。另外,也可以連接公用的FTP服務器,并下載文件。Execute方法支持普通的FTP命令,如CD和GET。要使用inet控件,需要在菜單欄上選擇“工程→部件”選項,在“部件”對話框的“控件”選項卡中找到項,添加到工程中。添加后,在工具箱中將出現(xiàn)圖標。第24頁,課件共62頁,創(chuàng)作于2023年2月2.主要屬性(1)URL屬性:設置或返回Execute或OpenURL方法使用的URL。URL屬性至少必須包含一個協(xié)議(FTP或HTTP)和一個遠程主機名。URL屬性可以是目錄或文件。例如,下面兩個URLs都是有效的:'設置URL,僅返回文件目錄:Inet1.URL="HTTP://"'該URL將返回文件的文本:Inet1.URL=HTTP:///disclaimer.txt(2)RequestTimeout屬性:設置或返回超時截止前按秒計算的等待時間長度。如果請求在指定的時間內還沒有響應,并且該請求使用OpenURL方法(同步地),將產生錯誤;如果請求使用Execute方法,將引發(fā)帶錯誤碼的StateChanged事件。把該屬性設置為0,則意味著不限定等待時間。(3)Protocol屬性:設置或返回一個值,指定和Execute方法一起使用的協(xié)議。第25頁,課件共62頁,創(chuàng)作于2023年2月表11-3Protocol的有效設置值常數(shù)值描述icUnknown0未知的。icDefault1缺省協(xié)議。icFTP2FTP。文件傳輸協(xié)議。icReserved3為將來預留。icHTTP4HTTP。超文本傳輸協(xié)議。icHTTPS5安全HTTP。第26頁,課件共62頁,創(chuàng)作于2023年2月(4)UserName屬性:設置或返回與請求一起發(fā)送到遠程計算機的名稱。如果該屬性為空,提出請求時該控件將把“anonymous”作為用戶名來發(fā)送。(5)Password屬性:設置或返回一個密碼,該密碼將和請求一道被發(fā)送,用以在遠程計算機上登錄。如果該屬性為空,控件將發(fā)送一個缺省的密碼。第27頁,課件共62頁,創(chuàng)作于2023年2月3.主要方法(1)Execute方法作用:執(zhí)行對遠程服務器的請求。只能發(fā)送對特定的協(xié)議有效的請求。語法格式:Executeurl,operation,data,requestHeadersExecute屬性的語法包含以下部分:url:可選,字符串,指定控件將要連接的URL。如果這里未指定URL,將使用URL屬性中指定的URL。Operation:可選,字符串,指定將要執(zhí)行的操作類型。支持的操作列表參見下面的“設置值”。Data:可選,字符串,指定用于操作的數(shù)據(參見下面的“設置值”)。requestHeaders:可選,字符串,指定由遠程服務器傳來的附加的標頭。格式:headername:headervaluevbCrLf第28頁,課件共62頁,創(chuàng)作于2023年2月(2)OpenURL方法打開并返回指定URL的文檔,文檔以變體型返回。語法格式:OpenUrlurl[,datatype]其中:url:必需的,被檢索文檔的URL。Datatype:可選,整數(shù),如“設置值”所示,指定數(shù)據類型。Datatype的設置值:icString0:缺省值,把數(shù)據作為字符串來檢索。icByteArray1:把數(shù)據作為字節(jié)數(shù)組來檢索。4.主要事件Inet控件只有一個事件:StateChanged事件。該事件在連接中狀態(tài)發(fā)生改變時觸發(fā)。事件格式:tateChanged(ByValStateAsInteger)其中,State為整數(shù),取值見表11-4的“設置值”,用于指定狀態(tài)。第29頁,課件共62頁,創(chuàng)作于2023年2月表11-4State的設置值常數(shù)值描述icNone0無狀態(tài)可報告。icHostResolvingHost1該控件正在查詢所指定的主機的IP地址。icHostResolved2該控件已成功地找到所指定的主機的IP地址。icConnecting3該控件正在與主機連接。icConnected4該控件已與主機連接成功。icRequesting5該控件正在向主機發(fā)送請求。icRequestSent6該控件發(fā)送請求已成功。icReceivingResponse7該控件正在接收主機的響應。icResponseReceived8該控件已成功地接收到主機的響應。icDisconnecting9該控件正在解除與主機的連接。icDisconnected10該控件已成功地與主機解除了連接。icError11與主機通訊時出現(xiàn)了錯誤。icResponseCompleted12該請求已經完成,并且所有數(shù)據均已接收到。第30頁,課件共62頁,創(chuàng)作于2023年2月使用inet控件的一般思路:設置URL屬性,指定登錄的服務器;如果登錄的是FTP服務器,需要指定用戶名和密碼,可以匿名登錄的FTP服務器無需設置其UserName和Password屬性。然后通過Execute方法傳遞get命令參數(shù)下載文件;傳遞send命令參數(shù)上傳文件.第31頁,課件共62頁,創(chuàng)作于2023年2月11.2.2利用控件上傳下載文件
[例11-3][分析]要正確運行本例,需要在本地建立FTP服務器,在FTP服務器中存放有A6.MP3文件或其它任意文件。此外,也可以指定任意一個實際存在的FTP服務器,輸入用戶名和密碼進行下載和上傳文件。[建立工程]添加三個文本框,分別命名為Dlurl、Dlname、DLpwd,用于輸入服務器IP地址、用戶名和密碼。添加三個按鈕,分別為下載文件、上傳文件和保存帳號設置,并重新命名為:cmd_get、cmd_send和cmd_save。界面布局如圖11-4所示。第32頁,課件共62頁,創(chuàng)作于2023年2月cmd_getcmd_sendDLurlDLnameDLpwdlbl_statecmd_save圖11-4界面布局第33頁,課件共62頁,創(chuàng)作于2023年2月[程序代碼]1 DimTxt_ErrNumAsInteger2 Dimstate_infoAsString3 4 PrivateSubForm_Load()5 Txt_ErrNum=06 state_info=""7 lbl_state.Caption="就緒"8 9 configFTP10 EndSub11 12 SubconfigFTP()13 Inet1.URL=DLurl.Text14 Inet1.UserName=DLname.Text14 Inet1.Password=DLpwd.Text15 Inet1.Protocol=icFTP16 Inet1.RequestTimeout=6017 EndSub18 19 SubDown_Upload_file(flagAsInteger)20 OnErrorResumeNext第34頁,課件共62頁,創(chuàng)作于2023年2月21 configFTP22 23 Ifflag=0Then24 Inet1.Execute"","get/A6.MP3C:\5.mp3"25 Else26 Inet1.Execute"","sendC:\5.mp3/A61.MP3"27 EndIf28 29 IfErr.Number>0Then30 MsgBoxErr.Description31 GoToendjump32 EndIf33 34 WhileVal(Txt_ErrNum)<>12'等待下載結束<>1235 DoEvents36 IfVal(Txt_ErrNum)=11Then'下載過程出現(xiàn)錯誤37 GoToendjump38 EndIf39 Wend40 41 Inet1.Execute,"close"'關閉連接第35頁,課件共62頁,創(chuàng)作于2023年2月42 Inet1.Execute,"quit"'退出服務器43 44 endjump:45 EndSub46 47 PrivateSubcmd_get_Click()48 Down_Upload_file049 EndSub50 51 PrivateSubcmd_send_Click()52 Down_Upload_file153 EndSub54 55 PrivateSubcmd_save_Click()56 configFTP57 EndSub58 59 PrivateSubInet1_StateChanged(ByValStateAsInteger)60 Txt_ErrNum=State61 62 SelectCaseState63 Case0:64 state_info="空狀態(tài)!"65 Case1:66 state_info="正在查找服務器...!"第36頁,課件共62頁,創(chuàng)作于2023年2月67 Case2:70 state_info="找到服務器...!"71 Case3:72 state_info="準備連接服務器!"73 Case4:74 state_info="與服務器連接建立!"75 Case5:76 state_info="向服務器發(fā)出請求!"77 Case6:78 state_info="已經向服務器發(fā)出請求!"79 Case7:80 state_info="服務器收到請求!"81 Case8:82 state_info="服務器已經收到響應!正在傳送...."83 Case9:84 state_info="在斷開連接....!"85 Case10:86 state_info="已經斷開服務器!"87 Case11:88 state_info="發(fā)生通訊錯誤!"&Inet1.ResponseInfo89 Case12:90 state_info="向服務器發(fā)出的請求結束!傳送完畢!"91 EndSelect92 93 lbl_state.Caption=state_info94 EndSub第37頁,課件共62頁,創(chuàng)作于2023年2月12.3winsock傳輸控件
11.3.1winsock傳輸控件概述利用WinSock控件可以與遠程計算機建立連接,并通過用戶數(shù)據文報協(xié)議(UDP)或者傳輸控制協(xié)議(TCP)進行數(shù)據交換。這兩種協(xié)議都可以用來創(chuàng)建客戶與服務器應用程序。與Timer控件類似,WinSock控件在運行時是不可見的。要使用Winsock控件,需要在菜單欄上選擇“工程→部件”選項,在“部件”對話框的“控件”選項卡中找到項,添加到工程。添加后,在工具箱中將出現(xiàn)圖標。第38頁,課件共62頁,創(chuàng)作于2023年2月1.可能的用途(1)創(chuàng)建收集用戶信息的客戶端應用程序,并將收集的信息發(fā)送到某中央服務器。(2)創(chuàng)建一個服務器應用程序,作為多個用戶的數(shù)據的匯入點。(3)創(chuàng)建“聊天”應用程序。2.選擇通訊協(xié)議使用WinSock控件時,首先需要考慮使用什么協(xié)議??梢允褂玫膮f(xié)議包括TCP和UDP。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài):(1)TCP協(xié)議是基于連接的協(xié)議,可以將它與電話系統(tǒng)相比。開始數(shù)據傳輸之前,用戶必須先建立連接。(2)UDP協(xié)議是一種無連接協(xié)議,兩臺計算機之間的傳輸類似于傳遞郵件:消息從一臺計算機發(fā)送到另一臺計算機,但是兩者之間沒有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據量取決于具體的網絡。具體選擇哪一種協(xié)議,通常由需要創(chuàng)建的應用程序決定。下面的幾個問題將有助于選擇適宜的協(xié)議:(1)收發(fā)數(shù)據時,應用程序是否需要得到客戶端或服務器的確認信息?如果需要,使用TCP協(xié)議,在收發(fā)數(shù)據之前先建立明確的連接。第39頁,課件共62頁,創(chuàng)作于2023年2月(2)數(shù)據量是否特別大(例如圖象與聲音文件)?建立連接后,TCP協(xié)議將維護連接并確保數(shù)據的完整性。不過,這種連接需要更多的計算資源,因而是比較“昂貴”的。(3)數(shù)據發(fā)送是間歇的,還是在一個會話內?例如,如果應用程序在某個任務完成時需要通知某臺計算機,UDP協(xié)議更適宜。UDP協(xié)議適合發(fā)送少量的數(shù)據。3.協(xié)議的設置設計時,可以按以下方式設置應用程序使用的協(xié)議:在“屬性”窗口中單擊“協(xié)議”,然后選擇sckTCPProtocol或者sckUDPProtocol。也可以用程序代碼設置Protocol屬性,如下所示:Winsock1.Protocol=sckTCPProtocol第40頁,課件共62頁,創(chuàng)作于2023年2月4.主要屬性(1)Protocol:返回或設置Winsock控件使用的協(xié)議(TCP或UDP協(xié)議)。Protocol屬性的設置值見表11-5。表11-5protocol屬性的設置值常數(shù)值描述sckTCPProtocol0缺省的。TCP協(xié)議。sckUDPProtocol1UDP協(xié)議。第41頁,課件共62頁,創(chuàng)作于2023年2月(2)RemoteHost:返回或設置遠程計算機,控件向它發(fā)送數(shù)據或從它那里接收數(shù)據。既可提供主機名,如FTP://;也可提供點格式下的IP地址字符串,如“”。(3)RemoteHostIP:返回遠程主機的IP地址。若客戶應用程序已用Connect方法建立連接,屬性中包含了遠程機器的IP字符串。對于服務器應用程序,請求連接(ConnectionRequest事件)后,屬性包含遠程計算機的IP地址字符串,該字符串啟動了連接。使用UDP協(xié)議時,在DataArrival事件出現(xiàn)后,屬性包含了發(fā)送UDP數(shù)據的計算機的IP地址。(4)LocalHostName:返回本地計算機名。設計時是只讀的,而且不可用。(5)LocalIP:返回本地計算機的IP地址,格式是IP地址加點字符串(xxx.xxx.xxx.xxx)。設計時是只讀的,而且不可用。第42頁,課件共62頁,創(chuàng)作于2023年2月(6)LocalPort:返回或者設置所用的本地端口。設計時是可讀/寫的,而且可用。對客戶來說,該屬性指定發(fā)送數(shù)據的本地端口。如果應用程序不需要特定端口,則指定0為端口號。這種情況下,控件將選擇一個隨機端口。建立起連接后,該端口是用于TCP連接的本地端口。對于服務器來說,是用于偵聽的本地端口。如果指定端口0,就使用一個隨機端口。調用Listen方法后,屬性包含了已選定的實際端口。(7)BytesReceived:返回接收到的(當前在接收端緩沖區(qū)內的)數(shù)據的數(shù)量。使用GetData方法獲取數(shù)據。設計時是只讀的,而且不可用。(8)State:返回控件的狀態(tài),用枚舉類型表示。設計時是只讀的,而且不可用。State屬性的設置值見表11-6。第43頁,課件共62頁,創(chuàng)作于2023年2月常數(shù)值描述sckClosed0缺省的。關閉sckOpen1打開sckListening2偵聽sckConnectionPending3連接掛起sckResolvingHost4識別主機sckHostResolved5已識別主機sckConnecting6正在連接sckConnected7已連接sckClosing8同級人員正在關閉連接sckError9錯誤表11-6State屬性的設置值第44頁,課件共62頁,創(chuàng)作于2023年2月5.主要方法(1)Connect方法:要求連接到遠程計算機。說明:想建立TCP連接時,必須調用Connect方法。語法:ConnectremoteHost,remotePort返回值:無語法說明見表11-7。部分描述remoteHost必需的。要連接的遠程計算機的名稱。remotePort要連接的遠程計算機的端口。第45頁,課件共62頁,創(chuàng)作于2023年2月(2)Accept方法:僅適用于TCP服務器應用程序。處理ConnectionRequest事件時用這個方法接受新連接。語法:Acceptrequested返回值:無說明:在ConnectionRequest事件中使用Accept方法。ConnectionRequest事件有一個對應的參數(shù),即RequestID參數(shù),該參數(shù)應該傳給Accept方法。例如:PrivateSubWinsock1_ConnectionRequest(ByValrequestIDAsLong)'測試State屬性,如果當前連接是打開的話,則關閉連接。
IfWinsock1.State<>sckClosedThenWinsock1.Close'將requestID參數(shù)值傳遞給Accept方法。
Winsock1.AcceptrequestedEndSub(3)Listen方法:創(chuàng)建套接字并將其設置為偵聽模式。該方法僅適用于TCP連接。語法:Listen返回值:無說明:當有新連接時,就會出現(xiàn)ConnectionRequest事件。處理ConnectionRequest事件時,應用程序應該(在一個新的控件示例上)用Accept方法接受連接。第46頁,課件共62頁,創(chuàng)作于2023年2月(4)GetData方法:獲取當前的數(shù)據塊并將其存儲在變體類型的變量中。語法:GetDatadata,[type,][maxLen]語法說明見表11-8。表11-8GetData方法的語法說明部分描述Data在方法成功返回之后存儲獲取數(shù)據的地方。如果對請求的類型沒有足夠可用的數(shù)據,則將data設置成Empty。Type可選的。獲取的數(shù)據類型,如下例“設置值”所示。maxLen可選的。在接收到字節(jié)數(shù)組或字符串時所需大小。如果對字節(jié)數(shù)組或字符串、參數(shù)丟失、則將獲取所有可用數(shù)據。如果提供的數(shù)據類型不是字節(jié)數(shù)組或字符串,則忽略這個參數(shù)。第47頁,課件共62頁,創(chuàng)作于2023年2月type
的設置值見表11-9。表11-9type
的設置值描述常數(shù)BytevbByteIntegervbIntegerLongvbLong描述常數(shù)SinglevbSingleDoublevbDoubleCurrencyvbCurrencyDatevbDateBooleanvbBooleanSCODEvbErrorStringvbStringByteArrayvbArray+vbByte第48頁,課件共62頁,創(chuàng)作于2023年2月說明:通常將GetData方法與DataArrival事件并用,而DataArrival事件包含totalBytes參數(shù)。如果指定一個比totalBytes參數(shù)小的maxlen,則將得到警告10040,指出剩余的字節(jié)將丟失。(5)Bind方法:指定用于TCP連接的LocalPort和LocalIP。如果有多協(xié)議適配卡,就用這個方法。語法:Bind
LocalPort,LocalIPBind方法的語法說明見表11-10。表11-10Bind方法的語法說明部分描述LocalPort用來建立連接的端口。LocalIP用來建立連接的本地Internet地址。說明:調用Listen方法之前,必須調用Bind方法。第49頁,課件共62頁,創(chuàng)作于2023年2月6.主要事件(1)Connect事件:當一個Connect操作完成時發(fā)生。說明:使用Connect事件確認已經成功建立了一個連接。(2)ConnectionRequest事件:當遠程計算機請求連接時出現(xiàn)。說明:僅適用于TCP服務器應用程序。請求一個新連接時激活該事件。激活該事件后,RemoteHostIP和RemotePort屬性存儲有關客戶的信息;服務器可決定是否接受連接。如果不接受新連接,則同級人員(客戶)將得到Close事件。(在一個新控件示例上)用Accept方法接受新連接。(3)DataArrival事件:當新數(shù)據到達時出現(xiàn)。說明:如果沒有獲取一個GetData調用中的全部數(shù)據,則事件不會出現(xiàn)。只有存在新數(shù)據時才激活該事件??呻S時用BytesReceived屬性檢查可用的數(shù)據量。(4)SendComplete事件:完成一個發(fā)送操作時出現(xiàn)。(5)Error事件:無論何時,只要后臺處理中出現(xiàn)錯誤(例如連接失敗,或在后臺收發(fā)數(shù)據失?。录蜁霈F(xiàn)。(6)Close事件:當遠程計算機關閉連接時出現(xiàn)。應用程序應正確使用Close方法關閉TCP連接。第50頁,課件共62頁,創(chuàng)作于2023年2月11.3.2TCP連接初步
[例11-4]創(chuàng)建一個簡單的TCP服務器和客戶端。[分析]如果應用程序要使用TCP協(xié)議,首先必須決定應用程序是服務器還是客戶端。如果要創(chuàng)建一個服務器端,則應用程序需要“監(jiān)聽”指定的端口。當客戶端提出連接請求時,服務器端能夠接受請求并建立連接。連接建立后,客戶端與服務器端可以自由地互相通訊。第51頁,課件共62頁,創(chuàng)作于2023年2月1.創(chuàng)建TCP服務器[建立工程]創(chuàng)建新的StandardEXE工程。將默認窗體的名稱改為frmServer。將窗體的標題改為“TCP服務器”。在窗體中放入一個Winsock控件,將其名字改為tcpServer。在窗體上添加兩個TextBox控件,第一個命名為txtSendData,第二個命名txtOutput。[程序代碼]為窗體添加如下的代碼。PrivateSubForm_Load()'將LocalPort屬性設置為一個整數(shù)。'然后調用Listen方法。tcpServer.LocalPort=1001tcpServer.ListenfrmClient.Show'顯示客戶端的窗體。EndSubPrivateSubtcpServer_ConnectionRequest_(ByValrequestIDAsLong)第52頁,課件共62頁,創(chuàng)作于2023年2月'檢查控件的State屬性是否為關閉的。'如果不是,'在接受新的連接之前先關閉此連接。IftcpServer.State<>sckClosedThen_tcpServer.Close'接受具有requestID參數(shù)的'連接。tcpServer.AcceptrequestIDEndSubPrivateSubtxtSendData_Change()'名為txtSendData的TextBox控件中'包含了要發(fā)送的數(shù)據。當用戶往文本框中'鍵入數(shù)據時,使用SendData方法'發(fā)送輸入的字符串。tcpServer.SendDatatxtSendData.TextEndSubPrivateSubtcpServer_DataArrival_(ByValbytesTotalAsLong)第53頁,課件共62頁,創(chuàng)作于2023年2月'為進入的數(shù)據聲明一個變量。'調用GetData方法,并將數(shù)據賦予名為txtOutput'的TextBox的Text屬性。DimstrDataAsStringtcpServer.GetDatastrDatatxtOutput.Text=strDataEndSub說明:以上步驟創(chuàng)建了一個簡單的服務器應用程序。為了使它能夠工作,還必須為它創(chuàng)建一個客戶端的應用程序。第54頁,課件共62頁,創(chuàng)作于2023年2月2.創(chuàng)建TCP客戶端[建立工程]在工程中添加一個新的窗體,將其命名為frmClient。將窗體的標題改為“TCPClient”。在窗體中添加一個Winsock控件,并將其命名為tcpClient。在frmClient中添加兩個TextBox控件。將第一個命名為txtSend,第二個為txtOutput。在窗體上放一個CommandButton控件,并將其命名為cmdConnect。將CommandButton控件的標題改為Connect。[程序代碼]在窗體中添加如下的代碼。第55頁,課件共62頁,創(chuàng)作于2023年2月注意:必須將RemoteHost屬性值修改為計算機名。PrivateSubForm_Load()'Winsock控件的名字為tcpClient。
'注意:要指定遠程主機,可以使用
'IP地址(例如:""),也可以使用
'計算機的“好聽的名字”如下所示。
tcpClient.RemoteHost="RemoteComputerName"tcpClient.RemotePort=1001EndSubPrivateSubcmdConnect_Click()'調用Connect方法,初始化連接。
tcpClient.ConnectEndSubPrivateSubtxtSendData_Change()tcpClient.SendDatatxtSend.TextEndSubPrivateSubtcpClient_DataArrival_(ByValbytesTotalAsLong)DimstrDataAsStringtcpClient.GetDatastrDatatxtOutput.Te
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色建筑材料產銷合作框架協(xié)議書3篇
- 專項舊房翻新改造授權合同2024版一
- 專項消防工程:2024年中央空調安全系統(tǒng)協(xié)議版B版
- 2025年度時尚秀場場地租賃拍攝合同4篇
- 2025年度產業(yè)園企業(yè)入駐綠色生產技術轉移合作協(xié)議4篇
- 2025年度工業(yè)0智能廠房租賃合作協(xié)議2篇
- 2025年度汽車零部件全球采購合同4篇
- 2025年度虛擬現(xiàn)實設備檢測服務合同范本4篇
- 二零二五年度綜合醫(yī)院設備采購協(xié)議-64排螺旋CT設備3篇
- 2024年藥品供應鏈管理合作協(xié)議6篇
- 2025年度影視制作公司兼職制片人聘用合同3篇
- 兒童糖尿病的飲食
- 2025屆高考語文復習:散文的結構與行文思路 課件
- 干細胞項目商業(yè)計劃書
- 浙江省嘉興市2024-2025學年高一數(shù)學上學期期末試題含解析
- 2024年高考新課標Ⅱ卷語文試題講評課件
- 無人機航拍技術教案(完整版)
- 人教PEP版(2024)三年級上冊英語Unit 4《Plants around us》單元作業(yè)設計
- 《保密法》培訓課件
- 回收二手機免責協(xié)議書模板
- 采購控制程序
評論
0/150
提交評論