VB. net TCPListner работает один раз, затем действует странно - PullRequest
0 голосов
/ 29 марта 2020

Я работаю над написанием TCP-прослушивателя для принятия вывода на принтер для проекта. Я написал следующий код, и он прекрасно работает, один раз. После обработки первого задания на печать оно ведет себя странно.

Во время выполнения программа находится в строке tcpClient = TheTCPListener.AcceptTcpClient () до тех пор, пока что-то не подключится, затем обрабатывает отправляемые данные. Первое задание на печать прекрасно работает. Если я отправлю еще 5 заданий на печать, они могут все go до конца или они могут некоторое время находиться в строке tcpClient = TheTCPListener.AcceptTcpClient (), а затем продолжать обработку кода без получения каких-либо данных и l oop назад к этому месту снова. После первого раза он может и не получать какие-либо данные, но будет продолжать цикл до тех пор, пока в очереди на печать будет что-то ожидающее отправки. В конце концов, он обработает все задания на печать, но я не могу понять, почему он работает идеально один раз (КАЖДЫЙ ВРЕМЯ), а затем может работать или не работать правильно при следующей отправке данных.

Любая помощь или предложения очень ценятся!

    Public Sub EnableListener()
    Dim TheTCPListener As New TcpListener(IPAdr, PortNumber)
    Dim tcpClient As TcpClient = Nothing
    Dim networkStream As NetworkStream = Nothing
    Dim UseThisFileName As String = ""
    Dim bytestoread As Integer = 0
    Dim temploopcount As Integer = 0

    'start the TCP listener
    TheTCPListener.Start()

    While (True)
       'Reset The Size of the byte chunk
        bytestoread = 0

        'Wait for connection
        tcpClient = TheTCPListener.AcceptTcpClient()

        'Set the buffer size large enough to handle the whole file
        tcpClient.ReceiveBufferSize = 60000000

        'set the filename to write too
        UseThisFileName = getfilenameext()

        networkStream = tcpClient.GetStream

        'verify that the stream has data to read 
        While networkStream.DataAvailable

            networkStream.Read(bytes, 0, 60000000)
            bytestoread = 0

        ' Get the size of the bytes with data
            For x = 0 To 59999999
                If bytes(x) <> Nothing Then
                    bytestoread = bytestoread + 1

                End If
            Next

           'calls the sub to append to the file 
           writebtyestofile(PrintFolder + UseThisFileName, bytestoread)

           'resets the bytes array to empty 
           For x = 0 To 59999999 bytes(x) = Nothing Next

        End While

        'Close TcpClient.  Without this, the print job never finishes sending in the print queue
        tcpClient.Close()
    End While 'this loops the listener forever, unless the program is shut down.
End Sub

...