VB.net TCPListner 窗口服务

标签 vb.net sockets visual-studio-2013 windows-services tcp

我正在尝试构建一个 Windows 服务 tcpip 服务器以安装在某些计算机上以便能够向它们发送消息... 如果我将下面的代码作为普通的 Windows 应用程序运行,它可以完美运行,但是如果我使用它来创建 Windows 服务,它不会按预期运行。 通过 Visual Studio“附加调试”,我可以看到调试,每次我从客户端发送请求时,我都会看到:

The thread 0xf34 has exited with code 259 (0x103).

这意味着线程已经进入但是没有输出,或者console.write...

Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading

Public Class Main

Private serverSocket As TcpListener
Private Delegate Sub WriteMessageDelegate(ByVal msg As String)
Dim listenThread As New Thread(New ThreadStart(AddressOf ListenForClients))

Private Sub ListenForClients()
    serverSocket = New TcpListener(IPAddress.Any, 11000)
    serverSocket.Start()

    Console.WriteLine("Listen for clients...")

    While True  'blocks until a client has connected to the server
        Dim client As TcpClient = Me.serverSocket.AcceptTcpClient()
        Dim clientThread As New Thread(New ParameterizedThreadStart(AddressOf HandleClientComm))
        clientThread.Start(client)
    End While
End Sub

Private Sub HandleClientComm(ByVal client As Object)
    Dim tcpClient As TcpClient = DirectCast(client, TcpClient)
    Dim clientStream As NetworkStream = tcpClient.GetStream()

    Dim message As Byte() = New Byte(4095) {}
    Dim bytesRead As Integer

    Console.WriteLine("Handle client comm...")

    While True
        bytesRead = 0
        bytesRead = clientStream.Read(message, 0, 4096) 'blocks until a client sends a message

        If bytesRead = 0 Then
            Exit While 'the client has disconnected from the server
        End If

        'message has successfully been received

        'Dim encoder As New ASCIIEncoding()
        'Dim serverResponse As String = "Response to send"
        'Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(serverResponse)
        'clientStream.Write(sendBytes, 0, sendBytes.Length)

        Console.WriteLine(bytesRead)
        'message has successfully been received
        Dim encoder As New ASCIIEncoding()

        ' Convert the Bytes received to a string and display it on the Server Screen
        Dim msg As String = encoder.GetString(message, 0, bytesRead)
        Console.WriteLine(msg)
        'WriteMessage(msg)

    End While
    tcpClient.Close()

End Sub


Private Function BytesToString(
ByVal bytes() As Byte) As String
    Return Encoding.Default.GetString(bytes)
End Function

Private Sub WriteMessage(ByVal msg As String)

    If Me.MessagesLog.InvokeRequired Then
        Dim d As New WriteMessageDelegate(AddressOf WriteMessage)
        Me.MessagesLog.Invoke(d, New Object() {msg})
    Else
        Me.MessagesLog.AppendText(msg & Environment.NewLine)
    End If


End Sub

Protected Overrides Sub OnStart(ByVal args() As String)
    listenThread.Start()
    Console.WriteLine("Starting...")
End Sub




Protected Overrides Sub OnStop()
    ' Add code here to perform any tear-down necessary to stop your service.
    'listenThread.Abort()
End Sub

End Class

有人可以帮助我吗?

最佳答案

发现问题...

Windows 服务不会输出到 console.write()... 它必须与 debug.print() “线程...”输出正常..

谢谢, 美联社

关于VB.net TCPListner 窗口服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27926103/

相关文章:

visual-studio - Visual Studio 2013会自行随机更改主题

javascript - 如何让 Google map 在 Visual Studio Web 表单中工作?

vb.net - vb.net(在Visual Studio 2013中制造)和Access DB的几个问题

c# - 从宏调用 Excel VBA 加载项

sockets - Nginx connect() 到 unix :/var/run/fcgiwrap. 套接字失败

c++ - 套接字编程中的客户端到客户端消息传递

visual-studio-2013 - 安装项目和安装向导有什么区别?

VB.NET 2010 - FTPs TLS 显式模式

c# - 想要检查是否存在youtube url(视频)以及使用vb.net发布/修改的日期

java - Android 上的 IPv6 套接字