• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

    用Winsock制作一套聊天室和對話系統(tǒng)

    發(fā)布時間:  2012/6/24 15:13:59
    ·Winsock的主要屬性、事件和方法

    Winsock是不可見控件,控件文件名是MSWINSCK.OCX,全稱為Mcirosoftwinsockcontrol,使用時要將此控件調(diào)入工具箱。

    1·屬性:①Protocol=0//使用TCP協(xié)議;

    ②RemoteHost//準備連接遠程機的IP地址

    ③RemotePort//連接遠程機的IP端口號(1024—65535之間)

    ④LocalPort//本地機監(jiān)聽IP端口號必須與呼叫機端口號相同

    2·方法:①connect//申請連接遠程機

    ②listen//設(shè)置監(jiān)聽

    ③accept//建立實際連接

    ④senddata//發(fā)送數(shù)據(jù)

    ⑤getdata//接收數(shù)據(jù)

    ⑥close//關(guān)閉連接

    3·事件:①connectionrequest//一方請求連接時另一方產(chǎn)生

    ②connect//一方機接受連接時另一方產(chǎn)生

    ③close//一方機關(guān)閉連接時另一方產(chǎn)生

    ④dataArrival//一方發(fā)送數(shù)據(jù)另一方產(chǎn)生

    ⑤error//請求連接失敗時產(chǎn)生

    二·制作方法

    ⑴在一工程中添加兩個表單form1(模擬客戶端)、form2(模擬服務(wù)器端)。

    form1中裝入控件:

    控件名
    主要屬性
    用途

    VB.Formform1
    caption=”雷萌聊天室”

    controlbox=0‘False
    模擬客戶機表單

    VB.Textboxtext1
    multiline=-1‘True

    scrollbars=3‘Bath
    用于輸入發(fā)往聊天室的信息

    VB.Textboxtext2
    locked=-1‘True

    multiline=-1‘True

    scrollbars=3‘Bath
    顯示從聊天室發(fā)來的信息

    VB.Comboboxcombo1
    text=”10.84.234.11”‘任定默認地址
    放入常用的地址

    VB.Commandbuttoncomm1
    caption=”退出”
    最小化form1

    VB.Commandbuttoncomm2
    caption=”連接”
    請求與輸入的地址連接

    VB.Commandbuttonsend
    caption=”發(fā)送”
    發(fā)送Text1中的內(nèi)容

    VB.Labellabel1
    caption=“請在此輸入發(fā)表的信息”
    Text1的框標

    VB.Labellabel2
    caption=“聊天室或?qū)Ψ降男畔?rdquo;
    Text2的框標

    VB.Labellabel3
    caption=”等待連接”
    顯示連接狀態(tài)信息

    VB.Labellabel4
    caption=”聊天室或?qū)Ψ降刂?rdquo;
    用于指示Combo1

    VB.Labellabel5
    caption=”操作:選地址連接,連接成功看到聊天室內(nèi)容后再輸信息發(fā)送”
    操作說明

    VB.Timertimer1
    interval=6000;enabled=false
    防止連接超時

    MSWinsocklib.winsocka

    用于數(shù)據(jù)傳輸






    form2中裝入控件:

    控件名
    主要屬性
    用途

    VB.Formform2
    caption=”接收信息”

    controlbox=0‘False
    模擬客戶機表單

    VB.Commandbuttoncommand1
    caption=”返回”
    隱含F(xiàn)orm2窗口

    VB.Commandbuttoncommand2
    caption=”對話”
    點對點會話時用此直接啟動Form1

    VB.Textboxtext1
    locked=-1‘True

    multiline=-1‘True

    scrollbars=3‘Bath
    存放聊天或?qū)υ拑?nèi)容

    VB.Labellabel1
    caption=”接收的信息”
    Text1的框標

    MSWinsocklib.Winsocka

    用于監(jiān)聽

    MSWinsocklib.Winsockb

    用于傳送聊天信息




    ⑵在Form1的各控件事件中加入如下代碼:

    DimflagAsBoolean注釋:連接狀態(tài)變量



    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"網(wǎng)絡(luò)連接失敗!"

    Label3.Caption="等待連接"

    Combo1.Enabled=True

    Combo1.SetFocus

    a.Close

    Comm2.Caption="連接"

    EndSub



    PrivateSubComm1_Click()

    a.Close注釋:關(guān)閉連接

    Form1.WindowState=1

    EndSub



    PrivateSubComm2_Click()

    IfComm2.Caption="斷開連接"Then

    a.Close

    Comm2.Caption="連接"

    Label3.Caption="等待連接"

    Combo1.Enabled=True

    Timer1.Enabled=False

    Comm2.MousePointer=0

    Form1.MousePointer=0

    Else

    Text2.Text=""

    Label3.Caption="正在連接.."

    Comm2.MousePointer=11

    Form1.MousePointer=11

    Timer1.Enabled=True

    flag=False

    a.Protocol=sckTCPProtocol

    a.RemoteHost=Combo1.Text

    a.RemotePort=3000

    a.Connect

    EndIf

    EndSub



    PrivateSubForm_DblClick()

    IfMsgBox("關(guān)閉本聊天室!確認嗎?",36,"退出系統(tǒng)")=6Then

    End

    Else

    Form1.WindowState=1

    EndIf

    EndSub



    PrivateSubForm_Load()

    IfApp.PrevInstanceThen

    MsgBox"本系統(tǒng)已經(jīng)加載,請看任務(wù)攔!",48,"提示"

    End

    EndIf

    flag=False

    LoadForm2‘讀入form2進入監(jiān)聽

    EndSub



    PrivateSubSend_Click()

    DimSAsString

    OnErrorGoToffff‘防止鏈路中斷

    Send.MousePointer=11

    IfRight(Text1.Text,1)<>Chr(10)Then

    S=Text1.Text Chr(13) Chr(10)

    Else

    S=Text1.Text

    EndIf

    IfflagThen

    a.SendDataS

    EndIf

    ExitSub

    ffff:

    MsgBox"連接中斷!",48,"提示"

    a.Close

    Send.MousePointer=0

    Comm2.Caption="連接"

    Label3.Caption="等待連接"

    Combo1.Enabled=True

    Comm2.MousePointer=0

    Form1.MousePointer=0

    ExitSub

    EndSub



    PrivateSubTimer1_Timer()

    flag=False

    Timer1.Enabled=False

    Comm2.MousePointer=0

    Form1.MousePointer=0

    MsgBox"網(wǎng)絡(luò)連接失敗(超時)!"

    Label3.Caption="等待連接"

    Combo1.Enabled=True

    Combo1.SetFocus

    a.Close

    Comm2.Caption="連接"

    EndSub



    ⑶在Form2的各控件事件中加入如下代碼:

    Constmaxn=200‘最大同時連接本機的客戶數(shù)

    Dimuser(maxn)AsBoolean



    PrivateSubCommand1_Click()

    Form2.Hide

    EndSub



    PrivateSubCommand2_Click()

    LoadForm1

    Form1.Show

    EndSub



    PrivateSubForm_Load()

    Dimstr1AsString

    Form2.Caption="雷萌通信軟件"

    注釋:winsock控件a作為服務(wù)器程序監(jiān)聽

    a.LocalPort=3000

    a.Listen

    EndSub



    PrivateSuba_ConnectionRequest(ByValrequestIDAsLong)

    DimiAsLong

    Fori=1Tomaxn‘當一客戶請求時給啟動一Winsock控件標志號

    IfNotuser(i)Then

    user(i)=True

    ExitFor

    EndIf

    Nexti

    Ifi>maxnThen

    ExitSub

    EndIf

    Loadb(i)‘當一客戶請求時啟動一Winsock控件

    b(i).AcceptrequestID注釋:實際建立連接

    IfText1.Text=""Then注釋:發(fā)送數(shù)據(jù)

    b(i).SendDataChr(0)

    Else

    b(i).SendDataText1.Text

    EndIf

    Form2.Show

    EndSub



    PrivateSubs_Close(IndexAsInteger)

    b(Index).Close注釋:關(guān)閉連接

    Unloadb(Index)注釋:卸載一個WinSock控件

    user(Index)=False

    EndSub



    PrivateSubb_DataArrival(IndexAsInteger,ByValbytesTotalAsLong)

    DimstrAsString

    DimiAsLong

    b(Index).GetDatastr

    Text1.Text=Text1.Text str

    Fori=1Tomaxn

    Ifuser(i)Then

    b(i).SendDatastr

    EndIf

    Nexti

    EndSub

    三·運行


    本文出自:億恩科技【www.vbseamall.com】

    服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線