我想创建一个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存储过程以将消息保存在数据库中。
答案 0 :(得分:0)
我怀疑你的服务线程已经结束,因为监控可能没有正确设置。
Dim listener As New TcpListener(8000)
listener.Start()
While(True)
// Wait for data from client, do some stuff
End While
listener.Stop()
这应该可以让您的服务继续运行。