Windows服务中的侦听器TCP / IP套接字

时间:2018-04-06 19:21:28

标签: vb.net service tcp-ip

我想创建一个Windows服务来运行侦听器TCP / IP套接字。侦听器TCP / IP套接字具有“While True”循环,可在Windows应用程序中运行。我有一个简单的Windows服务与计时器,它的工作原理,但当我在Windows服务中包含TCP / IP套接字时,它不起作用。我收到一条错误消息:'本地计算机上的XXX服务已启动然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。“有人对此有所了解吗?

这是启动TCP / IP侦听器的基本代码:

    Dim bytes() As Byte = New [Byte](1024) {}

    localEndPoint = New System.Net.IPEndPoint(IPA, C_PORT)
    listener = New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
        System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
    listener.Bind(localEndPoint)
    listener.Listen(10)
    While True
        Dim handler As System.Net.Sockets.Socket = listener.Accept()
        data = Nothing
        While True
            bytes = New Byte(1024) {}
            Dim bytesRec As Integer = handler.Receive(bytes)
            data += System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec)
            If data.IndexOf(Chr(28) & Chr(13)) > -1 Then
                Exit While
            End If
        End While
        s = data
        Dim m As M2_GIS.Tools.HL7.C_Message
        m = New M2_GIS.Tools.C_Message
        m.MessageString = s
        m.P_Read()
        m.P_GetMessageData()
        Dim Response As String
        Response = m.F_ReceivedAcknowledgement
        A2_p1.Value = s
        A2_p12.Value = Response
        m.DaedalusPK = CInt(A2_Cmd.ExecuteScalar)
        m.P_UpdateDatabase()
        Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(Response)
        handler.Send(msg)
        handler.Shutdown(System.Net.Sockets.SocketShutdown.Both)
        handler.Close()
    End While

listener和localEndPoint是该类的属性。 M2_GIS.Tools.HL7.C_Message类只是我自己的类来处理传入的消息.A2_变量用于运行SQL Server存储过程以将消息保存在数据库中。

1 个答案:

答案 0 :(得分:0)

我怀疑你的服务线程已经结束,因为监控可能没有正确设置。

Dim listener As New TcpListener(8000)

listener.Start()

While(True)

// Wait for data from client, do some stuff

End While

listener.Stop()

这应该可以让您的服务继续运行。