用vb.net开发的简易服务器

在这里介绍程序主要实现的功能以及流程。
程序在启动后会开启1个线程,1个定时器,一个线程用来接受来自客户端的连接,定时器用来检测当前有多少个客户连接,当有一个客户连接是,会开启一个线程用来与客户传送消息。为了简单起见,服务器发送消息为广播发送。

全局变量:

Dim listen_thread As Thread’监听线程
Dim listener As Socket '套接字
Public allDone As New ManualResetEvent(False)
Dim Thread_listen As Thread

Dim So As New ArrayList'已连接客户的集合
Dim thread_lock As Object = New Object()'用于线程锁
Dim Time As Timers.Time'定时器

Public Class StateObject
’ Client socket.
Public workSocket As Socket = Nothing
’ Size of receive buffer.
Public Const BufferSize As Integer = 1024
’ Receive buffer.
Public buffer(BufferSize) As Byte
’ Received data string.
Public sb As New StringBuilder
Public size As Int32
End Class 'StateObject

接受连接的线程过程;

Public Sub listen_handle()
    TextBox3.AppendText(vbNewLine & "服务器启动")
    TextBox3.ScrollToCaret()
    While 1

        allDone.Reset()
        Try
            listener.BeginAccept(New AsyncCallback(AddressOf Accept_callback), listener)
        Catch e As Exception
            Exit Sub
        End Try
        allDone.WaitOne()
    End While
End Sub

处理连接的线程vb.net教程过程:

Public Sub Accept_callback(ar As IAsyncResult)
allDone.Set() '让线程开始

    Dim waitDone As New ManualResetEvent(False)
    Dim socketi As Socket

    Try
        socketi = listener.EndAccept(ar)
    Catch ie As Exception
        Exit Sub
    End Try
    '显示出来
    TextBox3.AppendText(vbNewLine & "加入一个" & socketi.RemoteEndPoint.ToString)
    TextBox3.ScrollToCaret()
    Dim State As New StateObject()
    State.workSocket = socketi
    SyncLock thread_lock '/加入集合
        So.Add(socketi)
    End SyncLock
    State.size = 0
    Dim err As Int32 = 0
    While 1
        Try
            err = socketi.Receive(State.buffer)
        Catch e As Exception'接受异常说明客户端终止
            TextBox3.AppendText(vbNewLine & "客户端终止")
            TextBox3.ScrollToCaret()
            socketi.Close()
            SyncLock thread_lock
                So.Remove(socketi)
            End SyncLock
            Exit Sub
        End Try
        If err > 0 Then '接收到消息并回调
            State.sb.Clear()
            State.sb.Append(Encoding.ASCII.GetString(State.buffer, 0, err))
            Dim str As String
            str = State.sb.ToString()
            TextBox1.AppendText(vbNewLine & str)
            TextBox1.ScrollToCaret()
        End If
    End While
End Sub

定时器过程:

Public Sub Time_hande()
    Dim str As String = ""
    SyncLock thread_lock '
        For Each member As Socket In So
            str = str & member.RemoteEndPoint.ToString() & vbNewLine
        Next
    End SyncLock
    TextBox6.Text = str
End Sub

界面:
这里写图片描述
在这里插入图片描述

github:https://github.com/fengasdf/WindowsApplication4/blob/master/WindowsApplication4/Form1.vb

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值