Я работаю над написанием 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