期刊VIP學術指導 符合學術規范和道德
保障品質 保證專業,沒有后顧之憂
在一個單位內部或通過廣域協議(如X.25)互聯的行業內部都有幾十或上萬臺計算機互聯,用Intranet雖然可以建立聊天室,但實現點對點實時對話卻比較困難。本人用Winsock和VB自制了一套聊天室和對話系統,特拿來供同行們參考。
一·Winsock的主要屬性、事件和方法
Winsock是不可見控件,控件文件名是MSWINSCK.OCX,全稱為Mcirosoftwinsockcontrol,使用時要將此控件調入工具箱。
1·屬性:①Protocol=0//使用TCP協議;
②RemoteHost//準備連接遠程機的IP地址
③RemotePort//連接遠程機的IP端口號(1024—65535之間)
④LocalPort//本地機監聽IP端口號必須與呼叫機端口號相同
2·方法:①connect//申請連接遠程機
②listen//設置監聽
③accept//建立實際連接
④senddata//發送數據
⑤getdata//接收數據
⑥close//關閉連接
3·事件:①connectionrequest//一方請求連接時另一方產生
②connect//一方機接受連接時另一方產生
③close//一方機關閉連接時另一方產生
④dataArrival//一方發送數據另一方產生
⑤error//請求連接失敗時產生
二·制作方法
⑴在一工程中添加兩個表單form1(模擬客戶端)、form2(模擬服務器端)。
form1中裝入控件:
控件名
主要屬性
用途
VB.Formform1
caption=”雷萌聊天室”
controlbox=0‘False
模擬客戶機表單
VB.Textboxtext1
multiline=-1‘True
scrollbars=3‘Bath
用于輸入發往聊天室的信息
VB.Textboxtext2
locked=-1‘True
multiline=-1‘True
scrollbars=3‘Bath
顯示從聊天室發來的信息
VB.Comboboxcombo1
text=”10.84.234.11”‘任定默認地址
放入常用的地址
VB.Commandbuttoncomm1
caption=”退出”
最小化form1
VB.Commandbuttoncomm2
caption=”連接”
請求與輸入的地址連接
VB.Commandbuttonsend
caption=”發送”
發送Text1中的內容
VB.Labellabel1
caption=“請在此輸入發表的信息”
Text1的框標
VB.Labellabel2
caption=“聊天室或對方的信息”
Text2的框標
VB.Labellabel3
caption=”等待連接”
顯示連接狀態信息
VB.Labellabel4
caption=”聊天室或對方地址”
用于指示Combo1
VB.Labellabel5
caption=”操作:選地址連接,連接成功看到聊天室內容后再輸信息發送”
操作說明
VB.Timertimer1
interval=6000;enabled=false
防止連接超時
MSWinsocklib.winsocka
用于數據傳輸
form2中裝入控件:
控件名
主要屬性
用途
VB.Formform2
caption=”接收信息”
controlbox=0‘False
模擬客戶機表單
VB.Commandbuttoncommand1
caption=”返回”
隱含Form2窗口
VB.Commandbuttoncommand2
caption=”對話”
點對點會話時用此直接啟動Form1
VB.Textboxtext1
locked=-1‘True
multiline=-1‘True
scrollbars=3‘Bath
存放聊天或對話內容
VB.Labellabel1
caption=”接收的信息”
Text1的框標
MSWinsocklib.Winsocka
用于監聽
MSWinsocklib.Winsockb
用于傳送聊天信息
⑵在Form1的各控件事件中加入如下代碼:
DimflagAsBoolean注釋:連接狀態變量
PrivateSuba_Connect()
flag=True
EndSub
PrivateSuba_DataArrival(ByValbytesTotalAsLong)
DimiAsString
a.GetDatai
Label3.Caption="連接成功!"
Comm2.MousePointer=0
Form1.MousePointer=0
Timer1.Enabled=False
Ifi=Chr(0)Then
Text2.Text="你是今天第一個進入本聊天室的客戶。"+Chr(13)+Chr(10)
Else
Text2.Text=Text2.Text+i
EndIf
Text2.SelStart=Len(Text2.Text)
Send.MousePointer=0
Combo1.Enabled=False
Comm2.Caption="斷開連接"
Text1.SetFocus
EndSub
PrivateSuba_Error(ByValNumberAsInteger,DescriptionAsString,ByValScodeAsLong,ByValSourceAsString,ByValHelpFileAsString,ByValHelpContextAsLong,CancelDisplayAsBoolean)
flag=False
Timer1.Enabled=False
Comm2.MousePointer=0
Form1.MousePointer=0
MsgBox"網絡連接失敗!"
Label3.Caption="等待連接"
Combo1.Enabled=True
Combo1.SetFocus
a.Close
Comm2.Caption="連接"
EndSub