⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 117.htm

📁 VB的一些网络编程的例子,个人认为还不错。大家一起来研究一下.
💻 HTM
字号:
<p>在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建立聊天室,但实现点对点实时对话却比较困难。本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。</p>
<p></p>
<p>     一·Winsock的主要属性、事件和方法</p>
<p></p>
<p>     Winsock是不可见控件,控件文件名是MSWINSCK.OCX,全称为Mcirosoft winsock control,使用时要将此控件调入工具箱。</p>
<p></p>
<p>    1·属性:①Protocol=0       //使用TCP协议;</p>
<p></p>
<p>              ②RemoteHost     //准备连接远程机的IP地址</p>
<p></p>
<p>              ③RemotePort     //连接远程机的IP端口号 (1024—65535之间)</p>
<p></p>
<p>              ④LocalPort       //本地机监听IP端口号必须与呼叫机端口号相同</p>
<p></p>
<p>2·方法:①connect         //申请连接远程机</p>
<p></p>
<p>          ②listen           //设置监听</p>
<p></p>
<p>          ③accept          //建立实际连接</p>
<p></p>
<p>          ④senddata        //发送数据</p>
<p></p>
<p>          ⑤getdata          //接收数据</p>
<p></p>
<p>          ⑥close            //关闭连接</p>
<p></p>
<p>3·事件:①connectionrequest    //一方请求连接时另一方产生</p>
<p></p>
<p>          ②connect            //一方机接受连接时另一方产生</p>
<p></p>
<p>          ③close              //一方机关闭连接时另一方产生</p>
<p></p>
<p>          ④dataArrival         //一方发送数据另一方产生</p>
<p></p>
<p>          ⑤error              //请求连接失败时产生</p>
<p></p>
<p>二·制作方法</p>
<p></p>
<p>⑴ 在一工程中添加两个表单form1(模拟客户端)、form2(模拟服务器端)。</p>
<p></p>
<p>form1中装入控件:</p>
<p></p>
<p>    控件名</p>
<p>          主要属性</p>
<p>         用      途</p>
<p></p>
<p>VB.Form form1</p>
<p>caption=”雷萌聊天室”</p>
<p></p>
<p>controlbox=0 ‘False</p>
<p>模拟客户机表单</p>
<p></p>
<p>VB.Textbox text1</p>
<p>multiline=-1    ‘True</p>
<p></p>
<p>scrollbars=3    ‘Bath</p>
<p>用于输入发往聊天室的信息</p>
<p></p>
<p>VB.Textbox text2</p>
<p>locked=-1     ‘True</p>
<p></p>
<p>multiline=-1    ‘True</p>
<p></p>
<p>scrollbars=3    ‘Bath</p>
<p>显示从聊天室发来的信息</p>
<p></p>
<p>VB.Combobox combo1</p>
<p>text=”10.84.234.11”  ‘任定默认地址</p>
<p>放入常用的地址</p>
<p></p>
<p>VB.Commandbutton comm1                </p>
<p>caption=”退出”</p>
<p>最小化form1</p>
<p></p>
<p>VB.Commandbutton comm2                    </p>
<p>caption=”连接”</p>
<p>请求与输入的地址连接</p>
<p></p>
<p>VB.Commandbutton send                    </p>
<p>caption=”发送”</p>
<p>发送Text1中的内容</p>
<p></p>
<p>VB.Label label1</p>
<p>caption=“请在此输入发表的信息”</p>
<p>Text1的框标</p>
<p></p>
<p>VB.Label label2</p>
<p>caption=“聊天室或对方的信息”</p>
<p>Text2的框标</p>
<p></p>
<p>VB.Label label3</p>
<p>caption=”等待连接”</p>
<p>显示连接状态信息</p>
<p></p>
<p>VB.Label label4</p>
<p>caption=”聊天室或对方地址”</p>
<p>用于指示Combo1</p>
<p></p>
<p>VB.Label label5</p>
<p>caption=”操作:选地址连接,连接成功看到聊天室内容后再输信息发送”</p>
<p>操作说明</p>
<p></p>
<p>VB.Timer timer1</p>
<p>interval=6000;   enabled=false</p>
<p>防止连接超时</p>
<p></p>
<p>MSWinsocklib.winsock a</p>
<p>   </p>
<p>用于数据传输</p>
<p></p>
<p></p>
<p>  </p>
<p></p>
<p>  </p>
<p></p>
<p>form2中装入控件:</p>
<p></p>
<p>    控件名</p>
<p>          主要属性</p>
<p>         用      途</p>
<p></p>
<p>VB.Form form2</p>
<p>caption=”接收信息”</p>
<p></p>
<p>controlbox=0 ‘False</p>
<p>模拟客户机表单</p>
<p></p>
<p>VB.Commandbutton                     command1</p>
<p>caption=”返回”</p>
<p>隐含Form2窗口</p>
<p></p>
<p>VB.Commandbutton                     command2</p>
<p>caption=”对话”</p>
<p>点对点会话时用此直接启动Form1</p>
<p></p>
<p>VB.Textbox text1</p>
<p>locked=-1     ‘True</p>
<p></p>
<p>multiline=-1    ‘True</p>
<p></p>
<p>scrollbars=3    ‘Bath</p>
<p>存放聊天或对话内容</p>
<p></p>
<p>VB.Label label1</p>
<p>caption=”接收的信息”</p>
<p>Text1的框标</p>
<p></p>
<p>MSWinsocklib.Winsock a</p>
<p>   </p>
<p>用于监听</p>
<p></p>
<p>MSWinsocklib.Winsock b</p>
<p>   </p>
<p>用于传送聊天信息</p>
<p></p>
<p></p>
<p>  </p>
<p></p>
<p>⑵ 在Form1的各控件事件中加入如下代码:</p>
<p></p>
<p>Dim flag As Boolean     注释:连接状态变量</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub a_Connect()</p>
<p></p>
<p>    flag = True</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub a_DataArrival(ByVal bytesTotal As Long)</p>
<p></p>
<p>    Dim i As String</p>
<p></p>
<p>    a.GetData i</p>
<p></p>
<p>    Label3.Caption = "连接成功!"</p>
<p></p>
<p>    Comm2.MousePointer = 0</p>
<p></p>
<p>    Form1.MousePointer = 0</p>
<p></p>
<p>    Timer1.Enabled = False</p>
<p></p>
<p>    If i = Chr(0) Then</p>
<p></p>
<p>      Text2.Text = "你是今天第一个进入本聊天室的客户。" + Chr(13) + Chr(10)</p>
<p></p>
<p>    Else</p>
<p></p>
<p>      Text2.Text = Text2.Text + i</p>
<p></p>
<p>    End If</p>
<p></p>
<p>    Text2.SelStart = Len(Text2.Text)</p>
<p></p>
<p>    Send.MousePointer = 0</p>
<p></p>
<p>    Combo1.Enabled = False</p>
<p></p>
<p>    Comm2.Caption = "断开连接"</p>
<p></p>
<p>    Text1.SetFocus</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub a_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)</p>
<p></p>
<p>    flag = False</p>
<p></p>
<p>    Timer1.Enabled = False</p>
<p></p>
<p>    Comm2.MousePointer = 0</p>
<p></p>
<p>    Form1.MousePointer = 0</p>
<p></p>
<p>    MsgBox "网络连接失败 !"</p>
<p></p>
<p>    Label3.Caption = "等待连接"</p>
<p></p>
<p>    Combo1.Enabled = True</p>
<p></p>
<p>    Combo1.SetFocus</p>
<p></p>
<p>    a.Close</p>
<p></p>
<p>    Comm2.Caption = "连接"</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Comm1_Click()</p>
<p></p>
<p>    a.Close       注释:关闭连接</p>
<p></p>
<p>    Form1.WindowState = 1</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Comm2_Click()</p>
<p></p>
<p>If Comm2.Caption = "断开连接" Then</p>
<p></p>
<p>   a.Close</p>
<p></p>
<p>   Comm2.Caption = "连接"</p>
<p></p>
<p>   Label3.Caption = "等待连接"</p>
<p></p>
<p>   Combo1.Enabled = True</p>
<p></p>
<p>   Timer1.Enabled = False</p>
<p></p>
<p>   Comm2.MousePointer = 0</p>
<p></p>
<p>   Form1.MousePointer = 0</p>
<p></p>
<p>Else</p>
<p></p>
<p>   Text2.Text = ""</p>
<p></p>
<p>   Label3.Caption = "正在连接.."</p>
<p></p>
<p>   Comm2.MousePointer = 11</p>
<p></p>
<p>   Form1.MousePointer = 11</p>
<p></p>
<p>   Timer1.Enabled = True</p>
<p></p>
<p>   flag = False</p>
<p></p>
<p>   a.Protocol = sckTCPProtocol</p>
<p></p>
<p>   a.RemoteHost = Combo1.Text</p>
<p></p>
<p>   a.RemotePort = 3000</p>
<p></p>
<p>   a.Connect</p>
<p></p>
<p>End If</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Form_DblClick()</p>
<p></p>
<p>If MsgBox("关闭本聊天室! 确认吗?", 36, "退出系统") = 6 Then</p>
<p></p>
<p>End</p>
<p></p>
<p>Else</p>
<p></p>
<p>Form1.WindowState = 1</p>
<p></p>
<p>End If</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Form_Load()</p>
<p></p>
<p>If App.PrevInstance Then</p>
<p></p>
<p>MsgBox "本系统已经加载,请看任务拦!", 48, "提示"</p>
<p></p>
<p>End</p>
<p></p>
<p>End If</p>
<p></p>
<p>flag = False</p>
<p></p>
<p>Load Form2    ‘读入form2进入监听</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Send_Click()</p>
<p></p>
<p>    Dim S As String</p>
<p></p>
<p>    On Error GoTo ffff     ‘防止链路中断</p>
<p></p>
<p>    Send.MousePointer = 11</p>
<p></p>
<p>    If Right(Text1.Text, 1) <> Chr(10) Then</p>
<p></p>
<p>        S = Text1.Text + Chr(13) + Chr(10)</p>
<p></p>
<p>    Else</p>
<p></p>
<p>        S = Text1.Text</p>
<p></p>
<p>    End If</p>
<p></p>
<p>    If flag Then</p>
<p></p>
<p>        a.SendData S</p>
<p></p>
<p>    End If</p>
<p></p>
<p>    Exit Sub</p>
<p></p>
<p>ffff:</p>
<p></p>
<p>MsgBox "连接中断!", 48, "提示"</p>
<p></p>
<p>a.Close</p>
<p></p>
<p>Send.MousePointer = 0</p>
<p></p>
<p>Comm2.Caption = "连接"</p>
<p></p>
<p>Label3.Caption = "等待连接"</p>
<p></p>
<p>Combo1.Enabled = True</p>
<p></p>
<p>Comm2.MousePointer = 0</p>
<p></p>
<p>Form1.MousePointer = 0</p>
<p></p>
<p>Exit Sub</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Timer1_Timer()</p>
<p></p>
<p>  flag = False</p>
<p></p>
<p>  Timer1.Enabled = False</p>
<p></p>
<p>  Comm2.MousePointer = 0</p>
<p></p>
<p>  Form1.MousePointer = 0</p>
<p></p>
<p>  MsgBox "网络连接失败(超时) !"</p>
<p></p>
<p>  Label3.Caption = "等待连接"</p>
<p></p>
<p>  Combo1.Enabled = True</p>
<p></p>
<p>  Combo1.SetFocus</p>
<p></p>
<p>  a.Close</p>
<p></p>
<p>  Comm2.Caption = "连接"</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>⑶ 在Form2的各控件事件中加入如下代码:</p>
<p></p>
<p>Const maxn = 200   ‘最大同时连接本机的客户数</p>
<p></p>
<p>Dim user(maxn) As Boolean</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Command1_Click()</p>
<p></p>
<p>  Form2.Hide</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Command2_Click()</p>
<p></p>
<p>Load Form1</p>
<p></p>
<p>Form1.Show</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub Form_Load()</p>
<p></p>
<p>       Dim str1 As String</p>
<p></p>
<p>    Form2.Caption = "雷萌通信软件"</p>
<p></p>
<p>    注释:winsock控件 a 作为服务器程序监听</p>
<p></p>
<p>    a.LocalPort = 3000</p>
<p></p>
<p>    a.Listen</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub a_ConnectionRequest(ByVal requestID As Long)</p>
<p></p>
<p>    Dim i As Long</p>
<p></p>
<p>      For i = 1 To maxn  ‘当一客户请求时给启动一Winsock控件标志号</p>
<p></p>
<p>        If Not user(i) Then</p>
<p></p>
<p>            user(i) = True</p>
<p></p>
<p>            Exit For</p>
<p></p>
<p>        End If</p>
<p></p>
<p>      Next i</p>
<p></p>
<p>    If i > maxn Then</p>
<p></p>
<p>        Exit Sub</p>
<p></p>
<p>    End If</p>
<p></p>
<p>   Load b(i)            ‘当一客户请求时启动一Winsock控件</p>
<p></p>
<p>   b(i).Accept requestID   注释:实际建立连接</p>
<p></p>
<p>   If Text1.Text = "" Then   注释:发送数据</p>
<p></p>
<p>      b(i).SendData Chr(0)</p>
<p></p>
<p>   Else</p>
<p></p>
<p>      b(i).SendData Text1.Text</p>
<p></p>
<p>   End If</p>
<p></p>
<p>   Form2.Show</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub s_Close(Index As Integer)</p>
<p></p>
<p>   b(Index).Close      注释:关闭连接</p>
<p></p>
<p>   Unload b(Index)     注释:卸载 一个WinSock 控件</p>
<p></p>
<p>   user(Index) = False</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>  </p>
<p></p>
<p>Private Sub b_DataArrival(Index As Integer, ByVal bytesTotal As Long)</p>
<p></p>
<p>   Dim str As String</p>
<p></p>
<p>   Dim i As Long</p>
<p></p>
<p>    b(Index).GetData str</p>
<p></p>
<p>    Text1.Text = Text1.Text + str</p>
<p></p>
<p>   For i = 1 To maxn</p>
<p></p>
<p>    If user(i) Then</p>
<p></p>
<p>    b(i).SendData str</p>
<p></p>
<p>    End If</p>
<p></p>
<p>   Next i</p>
<p></p>
<p>End Sub</p>
<p></p>
<p>三·运行</p>
<p></p>
<p>本程序在VB6.0中编译通过,运行后最小化到任务栏上,也可以用API的Shell_Notifyicon 函数做入右下角的指示器栏中常驻内存。你可以在网络中用一个固定的机器地址作为聊天讨论室,其他用户都选该机地址连接进入该室聊天或讨论。各用户也可选各自熟悉的地址进行连接对话,双击form1空白处从内存中撤出系统。根据同样的原理可以制作电子邮件系统。  </p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -