TCP IP pblm in VB .net urgent

TCP IP pblm in VB .net urgent other wise i will suicide

Page 1 of 1

0 Replies - 1370 Views - Last Post: 22 October 2009 - 04:17 AM Rate Topic: -----

#1 thomaspaul123  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 1
  • Joined: 22-October 09

TCP IP pblm in VB .net urgent

Posted 22 October 2009 - 04:17 AM

Dear programmers,

I am on near to my end if i cannot fix this pblm . Every doors are closed in frotn of me . You are the last door i am knocking plzzzz help becoz i dont know .net

My name is Thomas . I am a really bad situation now . Plz help me becoz i dont know VB .net . But suprisingly i had to look after a telephone call capturing system in a famous hotel in dubai . The s/w is developed using vb .net . It reads data using a tcp ip connection from another system on the network . But my pblm is the software i am mentioned is not reading data properly . A lot of missing in values are there .Up to this we thought that this was a port pblm and we thought that system is not getting values fromt he port . We check the port through hyperterminal . But the values are coming . But while running our s/w . It seesm to be stuck on mid night and all most 50 rows its missing . I am in situation that i dotn know what to do . Plz help .This is my last door .Plzz help me your brother . I will paste the code here from which the connection is made


Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Imports System.Net.Sockets
Imports System.Text

Public Class RTCPIPClass
	Dim RIESever As TcpListener
	Dim RIEClient As TcpClient
	Private WithEvents _SerialPort As SerialPort
	Private _bContinueSerialAccess As Boolean = False
	Private WithEvents _form1 As Form1
	Private _Errmsg As ErrorMessage
	Private _bDataArrived As Boolean
	Private _tServerReadingThread As Thread
	Private _tServerWritingThread As Thread
	Private _tConnectionAliveCheckingThread As Thread
	Private _tDatareceivedThread As Thread
	Private IDCode As String
	Private IPAdress As String
	Private PortNo As Integer
	Private RIELogFileHandler As RIELogFileHandler
	Private RIEICodeParameters As RIEICodeParameters
	Private Queue As Queue = New Queue
	Private CompositeQueue As Queue = New Queue
	Private pLastMessageReceived As Date = Now()
	Private pSPILinkOpen As Boolean
	Private NumberOfTries As Integer
	Private QueueUnderProcess As Boolean = False
	Private CompositeQueueUnderProcess As Boolean = False
	Private networkStream As NetworkStream
	Private Errmsg As ErrorMessage

	Public ReadOnly Property LastMessageReceived() As Date
		Get
			Return pLastMessageReceived
		End Get
	End Property

	Public Property SPILinkOpen() As Boolean
		Set(ByVal value As Boolean)
			pSPILinkOpen = value
		End Set
		Get
			Return pSPILinkOpen
		End Get
	End Property

	Public Sub New(ByVal RIELogFileHandler As RIELogFileHandler, ByVal RIEICodeParameters As RIEICodeParameters) 'Default Constructor
		Try

			IDCode = RIEICodeParameters.IDCode
			PortNo = RIEICodeParameters.PortNO
			IPAdress = RIEICodeParameters.IPAddress
			_Errmsg = New ErrorMessage()
		   
			Try
				RIESever = New TcpListener(PortNo)
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				ServerStarts()
				RIELogFileHandler.QueueMessage("Server Port " & RIEICodeParameters.PortNO & " opened and reserved for communication with IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				MessageBox.Show(ex.Message, "Sever Starts")
			End Try

			Try
				Me.RIELogFileHandler = RIELogFileHandler
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				Me.RIEICodeParameters = RIEICodeParameters
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				_bContinueSerialAccess = True
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				_tDatareceivedThread = New Thread(AddressOf Port_DataReceived)
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try
			Try
				_tDatareceivedThread.Start()
				RIELogFileHandler.QueueMessage("Port Reader Checking(_tDatareceivedThread) started for " & RIEICodeParameters.PortNO & " and reserved for communication with IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				_tServerReadingThread = New Thread(AddressOf ReadFromPort)
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try
			Try
				_tServerReadingThread.Start()
				RIELogFileHandler.QueueMessage("Port Reader (_tServerReadingThread) started for " & RIEICodeParameters.PortNO & " and reserved for communication with IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				_tServerWritingThread = New Thread(AddressOf WriteToPort)
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			Try
				_tServerWritingThread.Start()
				RIELogFileHandler.QueueMessage("Port Writer (_tServerWritingThread) started for " & RIEICodeParameters.PortNO & " and reserved for communication with IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				MessageBox.Show(ex.Message)
			End Try

			If RIEICodeParameters.ConnectionAliveChecking = "Y" Then
				'Create New Thread to Check Communication Link
				Try
					_tConnectionAliveCheckingThread = New Thread(AddressOf ConnectionAliveChecker)
				Catch ex As Exception
					MessageBox.Show(ex.Message)
				End Try

				Try
					_tConnectionAliveCheckingThread.Start()
					RIELogFileHandler.QueueMessage("Connection Alive Checking (_tConnectionAliveCheckingThread) started for " & RIEICodeParameters.PortNO & " - IDCode " & RIEICodeParameters.IDCode & " - Checking Interval - " & RIEICodeParameters.ConnectionTimeOutInterval.ToString, "L")
				Catch ex As Exception
					MessageBox.Show(ex.Message)
				End Try
			End If

			NumberOfTries = 0
			pSPILinkOpen = True

		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try

	End Sub

	Private Sub ServerStarts()
		Try
			RIESever.Start()
			RIEClient = RIESever.AcceptTcpClient()
			networkStream = RIEClient.GetStream()
		Catch ex As Exception
			MessageBox.Show(ex.Message)
		End Try
	End Sub
	Private Sub Port_DataReceived()
		While networkStream.CanRead()
			_bDataArrived = True
			pLastMessageReceived = Now()
		End While
	End Sub


	Private Sub ConnectionAliveChecker()
		Dim CurrentDateTime As Date
		Dim ErrorMessage As String
		Dim Minutes As Integer
		Dim IntervalInMinutes As Integer
		Dim lretval As Long
		IntervalInMinutes = CType(RIEICodeParameters.ConnectionTimeOutInterval / 60000, Integer)

		While True
			CurrentDateTime = Now()

			Minutes = DateDiff(DateInterval.Minute, pLastMessageReceived, CurrentDateTime)

			If Minutes >= IntervalInMinutes Then

				ErrorMessage = "No Communication from Port " & RIEICodeParameters.PortNO.ToString() & " At " & RIEICodeParameters.RIECompanyName & " Interfacing with " & RIEICodeParameters.RIEIDCompanyName & " for the past " & Minutes.ToString & " Minutes. Kindly verify if the Interface is Active."
				RIELogFileHandler.QueueMessage(ErrorMessage, "L")
				lretval = Shell("net send " & RIEICodeParameters.NotificationPCIP & " " & """" & ErrorMessage & """", vbHide)
				lretval = Shell("net send " & RIEICodeParameters.AlternateNotificationPCIP & " " & """" & ErrorMessage & """", vbHide)

				RaiseEvent ConnectionDead(ErrorMessage)
			End If
			System.Threading.Thread.Sleep(RIEICodeParameters.ConnectionTimeOutInterval)
		End While
	End Sub
	Public Event ConnectionDead(ByVal ErrorMsg As String)

	Private Sub ReadFromPort()
		Dim bytesFrom(20048) As Byte
		Dim _ReadDataString As String
		While _bContinueSerialAccess
			If _bDataArrived Then
				Try
					ReDim bytesFrom(RIEClient.ReceiveBufferSize)
					networkStream.Read(bytesFrom, 0, CInt(RIEClient.ReceiveBufferSize))
					_ReadDataString = System.Text.Encoding.ASCII.GetString(bytesFrom)
					Array.Clear(bytesFrom, 0, bytesFrom.Length - 1)

					Try
						_ReadDataString = _ReadDataString
					Catch ex As Exception
						RIELogFileHandler.QueueMessage("Assign Error : " & ex.Message, "E")
					End Try
					Try
						_bDataArrived = False
					Catch ex As Exception
						MessageBox.Show("_bDataArrived = False" & ex.Message)
					End Try
					Try
						RaiseEvent ReceiveData(IDCode, _ReadDataString)
					Catch ex As Exception
					End Try
				Catch ex As Exception
					RIELogFileHandler.QueueMessage("Read Error : " & ex.Message, "E")
					_Errmsg.ErrormessageString = " Error in Reading Data : " & ex.Message
					_form1.SendMailer()
					_form1.Shutdown()
				End Try
			End If
		End While
	End Sub

	Public Event ReceiveData(ByVal IDCode As String, ByVal DataString As String)

	Public Event CommunicationLinkDown()

	Public Sub NAKMsg()
		' Retransmit Data If NAK Message is received from the Interface
		' Nothing to be done in Philips SOHO yet, Perhaps Maginet could behave different
		' If NEgative ACK is received and If the Message is generated from the Front End, 
		' then it could be a mistake. Log the NEgative ACK and Delete the Message from the
		' Queue
		If QueueUnderProcess Then
			If Queue.Count > 0 Then
				Dim QueueEnumerator As IEnumerator = Me.Queue.GetEnumerator
				QueueEnumerator.MoveNext()
				QueueEnumerator.Current.MsgStatus = True
				QueueEnumerator = Nothing
				RIELogFileHandler.QueueMessage("Received NAK. The Current Message shall not be send and is deleted from the SendQueue[S] : " & QueueEnumerator.Current.Msg, "E")
			End If
		End If
		If CompositeQueueUnderProcess Then
			If CompositeQueue.Count > 0 Then
				Dim QueueEnumerator As IEnumerator = Me.CompositeQueue.GetEnumerator
				QueueEnumerator.MoveNext()
				QueueEnumerator.Current.MsgStatus = True
				QueueEnumerator = Nothing
				RIELogFileHandler.QueueMessage("Received NAK. The Current Message shall not be send and is deleted from the SendQueue[C] : " & QueueEnumerator.Current.Msg, "E")
			End If
		End If

	End Sub

	Public Sub ACKMsg()
		'Taken from Form1.vb
		If SPILinkOpen = False Then
			SPILinkOpen = True
			NumberOfTries = 0
			If RIEICodeParameters.ResetTransmissionControlCount = "Y" Then
				'If Reset is Configured, the Reinit the Transmission Control Count - Check Out ??? 
				RIEICodeParameters.ResetTransmissionControlCountFlag = "Y"
			End If
			RIEICodeParameters.IDStatus = "O" ' Update ID Code Status to Open
			Try
				RIELogFileHandler.QueueMessage("Schdeuled Messager (tScheduledMessager) Re started for IDCode " & RIEICodeParameters.IDCode, "L")
				RIELogFileHandler.QueueMessage("Comminucation re-established between Reliance Interface Engine and IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				RIELogFileHandler.QueueMessage("Could not ReStart Schdeuled Messager (tScheduledMessager) for IDCode " & RIEICodeParameters.IDCode, "E")
				RIELogFileHandler.QueueMessage("Could not re-establish Communication between Reliance Interface Engine and IDCode " & RIEICodeParameters.IDCode, "E")
			End Try
		End If
		If CompositeQueueUnderProcess Then
			If CompositeQueue.Count > 0 Then
				Dim QueueEnumerator As IEnumerator = Me.CompositeQueue.GetEnumerator
				QueueEnumerator.MoveNext()
				QueueEnumerator.Current.MsgStatus = True
				QueueEnumerator = Nothing
			End If
		End If
		If QueueUnderProcess Then
			If Queue.Count > 0 Then
				Dim QueueEnumerator As IEnumerator = Me.Queue.GetEnumerator
				QueueEnumerator.MoveNext()
				QueueEnumerator.Current.MsgStatus = True
				QueueEnumerator = Nothing
			End If
		End If
	End Sub

	Public Sub WriteToPort(ByVal _WriteDataString As String, ByVal WritetoPort As Boolean, ByVal Logflag As Boolean)
		Try
			Dim sendBytes As [Byte]()
			If WritetoPort Then
				sendBytes = Encoding.ASCII.GetBytes(_WriteDataString)
				networkStream.Write(sendBytes, 0, sendBytes.Length)
				networkStream.Flush()
			End If
			If Logflag Then
				RIELogFileHandler.QueueMessage(" ID -> RIE : [D] " & _WriteDataString & " [" & Now() & "]", "L") 'chngd test purpose
			End If
		Catch ex As Exception
			ErrorMessage.ErrorMsg = "Error in Writing Response : " & ex.Message.ToString()
		   
		End Try
	End Sub

	Private Sub WriteToPort()
		Dim _WriteDataString As String
		Dim sendBytes As [Byte]()
		While _bContinueSerialAccess
			If NumberOfTries >= RIEICodeParameters.IDSendingRetryCount And RIEICodeParameters.IDSendingRetryCount <> 0 And SPILinkOpen Then
				SPILinkOpen = False
				RIELogFileHandler.QueueMessage("ID Not Responding [NumberOfTries exceed IDSendingRetryCount], communication error with IDCode " & RIEICodeParameters.IDCode, "L")
				RIELogFileHandler.QueueMessage("Clearing SendMessage Queue. Please send the following messages again : ", "L")
				If Queue.Count > 0 Then
					Dim QueueEnumerator As IEnumerator = Me.Queue.GetEnumerator
					While QueueEnumerator.MoveNext()
						RIELogFileHandler.QueueMessage("Could not send the message : " & QueueEnumerator.Current.Msg(), "L")
					End While
					Queue.Clear()
					QueueUnderProcess = False
				End If
				If CompositeQueue.Count > 0 Then
					Dim QueueEnumerator As IEnumerator = Me.CompositeQueue.GetEnumerator
					While QueueEnumerator.MoveNext()
						RIELogFileHandler.QueueMessage("Could not send the message : " & QueueEnumerator.Current.Msg(), "L")
					End While
					CompositeQueue.Clear()
					CompositeQueueUnderProcess = False
				End If
				RIELogFileHandler.QueueMessage("All queued messages purged. No messages will be send till the connection is re-established.", "L")
				RIELogFileHandler.QueueMessage("Port Writer (_tServerPortWritingThread) in Sleep State for Port " & RIEICodeParameters.PortNO & " with IDCode " & RIEICodeParameters.IDCode, "L")
				RaiseEvent CommunicationLinkDown()
			End If

			'If SPILinkOpen Then
			' Get the Top Object and check the Status
			Dim TopMsgObj As MsgSentStatus
			'Check the Queue to see if any pending messages to send
			If Queue.Count > 0 And CompositeQueueUnderProcess <> True Then
				TopMsgObj = Queue.Peek()
				' If ACK Received then POP the Msg from the Queue
				If TopMsgObj.MsgStatus = True Then
					TopMsgObj = Queue.Dequeue()
					NumberOfTries = 0
					QueueUnderProcess = False
				Else
					_WriteDataString = TopMsgObj.Msg
					Try
						sendBytes = Encoding.ASCII.GetBytes(_WriteDataString)
						networkStream.Write(sendBytes, 0, sendBytes.Length)
						If TopMsgObj.MaintainEvenLog = "Y" Then
							RIELogFileHandler.QueueMessage("Write Port- RIE -> ID : [S] " & _WriteDataString & " [" & TopMsgObj.TimeStamp & "]", "L")
						End If
						If SPILinkOpen Then
							NumberOfTries += 1
						End If
						QueueUnderProcess = True
					Catch ex As Exception
						_tServerReadingThread.Join()
						RIELogFileHandler.QueueMessage("Port Write Error. Message : " & _WriteDataString & " " & ex.Message, "E")
					End Try
				End If
			End If

			If CompositeQueue.Count > 0 And QueueUnderProcess <> True Then
				TopMsgObj = CompositeQueue.Peek()
				' If ACK Received then POP the Msg from the Queue
				If TopMsgObj.MsgStatus = True Then
					TopMsgObj = CompositeQueue.Dequeue()
					NumberOfTries = 0
					CompositeQueueUnderProcess = False
				Else
					_WriteDataString = TopMsgObj.Msg
					Try
						sendBytes = Encoding.ASCII.GetBytes(_WriteDataString)
						networkStream.Write(sendBytes, 0, sendBytes.Length)
						If TopMsgObj.MaintainEvenLog = "Y" Then
							RIELogFileHandler.QueueMessage("Write Port - RIE -> ID : [C] " & _WriteDataString & " [" & TopMsgObj.TimeStamp & "]", "L")
						End If
						If SPILinkOpen Then
							NumberOfTries += 1
						End If
						CompositeQueueUnderProcess = True
					Catch ex As Exception
						_tServerReadingThread.Join()
						RIELogFileHandler.QueueMessage("Port Write Error. Message : " & _WriteDataString & " " & ex.Message, "E")
					End Try
				End If
			End If
			Thread.Sleep(RIEICodeParameters.IDCodeReSendingInterval)
		End While
	End Sub


	Public Sub WriteToPortQueue(ByVal _WriteDataString As String, ByVal IDRequestType As Char, ByVal TimeStamp As Date, ByVal MaintainEvenLog As Char)
		' If The Transmission is not Control Messages Store the Previous Message
		Dim sendBytes As [Byte]()
		If (RIEICodeParameters.ACKMsgString <> _WriteDataString _
			And RIEICodeParameters.ACKMsgString1 <> _WriteDataString _
			And RIEICodeParameters.NAKMsgString <> _WriteDataString _
			And RIEICodeParameters.INITMsgString <> _WriteDataString) Then
			Dim MsgSentStatus As MsgSentStatus = New MsgSentStatus()
			MsgSentStatus.Msg = _WriteDataString
			MsgSentStatus.MsgStatus = False
			MsgSentStatus.TimeStamp = TimeStamp
			MsgSentStatus.MaintainEvenLog = MaintainEvenLog
			' IF the MEssage is a Part of Single Response, then write to Single Queue
			' Else write to Multiple Message Queue ..Eg. Response to Init Message
			If IDRequestType = "I" Then
				Queue.Enqueue(MsgSentStatus)
			Else
				CompositeQueue.Enqueue(MsgSentStatus)
			End If
		Else
			'Write the Simulated Control Message to the Serial Port 
			'For Testing Environment
			sendBytes = Encoding.ASCII.GetBytes(_WriteDataString)
			networkStream.Write(sendBytes, 0, sendBytes.Length)
			Array.Clear(sendBytes, 0, sendBytes.Length)
			networkStream.Flush()
			If MaintainEvenLog = "Y" Then
				RIELogFileHandler.QueueMessage("write Port Que RIE -> ID : [D] " & _WriteDataString & " [" & TimeStamp & "]", "L")
			End If
		End If
	End Sub


	Public Sub StopThreads()

		If _tServerReadingThread.ThreadState <> ThreadState.Aborted Or _
			_tServerReadingThread.ThreadState <> ThreadState.AbortRequested Then
			Try
				_tServerReadingThread.Abort()
				RIELogFileHandler.QueueMessage("Port Reader (_tDataReadingThread) for " & RIEICodeParameters.PortNO & " stopped for IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				RIELogFileHandler.QueueMessage("Error in StopThreads- (_tDataReadingThread) for " & RIEICodeParameters.PortNO & " for IDCode " & RIEICodeParameters.IDCode & " " & ex.Message, "E")
			End Try
		End If

		If _tServerWritingThread.ThreadState <> ThreadState.Aborted Or _
			_tServerWritingThread.ThreadState <> ThreadState.AbortRequested Then
			Try
				_tServerWritingThread.Abort()
				RIELogFileHandler.QueueMessage("Port Writer (_tDataWritingThread) for " & RIEICodeParameters.PortNO & " stopped for IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				RIELogFileHandler.QueueMessage("Error in StopThreads- (_tDataWritingThread) for " & RIEICodeParameters.PortNO & " for IDCode " & RIEICodeParameters.IDCode & " " & ex.Message, "E")
			End Try
		End If
		If Not _tConnectionAliveCheckingThread Is Nothing Then
			If _tConnectionAliveCheckingThread.ThreadState <> ThreadState.Aborted Or _
						_tConnectionAliveCheckingThread.ThreadState <> ThreadState.AbortRequested Then
				Try
					_tConnectionAliveCheckingThread.Abort()
					RIELogFileHandler.QueueMessage("Connection Alive Checking (_tConnectionAliveCheckingThread) for " & RIEICodeParameters.PortNO & " stopped for IDCode " & RIEICodeParameters.IDCode, "L")
				Catch ex As Exception
					RIELogFileHandler.QueueMessage("Error in StopThreads- (_tConnectionAliveCheckingThread) for " & RIEICodeParameters.PortNO & " for IDCode " & RIEICodeParameters.IDCode & " " & ex.Message, "E")
				End Try
			End If
			_tConnectionAliveCheckingThread = Nothing
		End If

		If _tDatareceivedThread.ThreadState <> ThreadState.Aborted Or _
			_tDatareceivedThread.ThreadState <> ThreadState.AbortRequested Then
			Try
				_tDatareceivedThread.Abort()
				RIELogFileHandler.QueueMessage("Port Checking (_tDatareceivedThread) for " & RIEICodeParameters.PortNO & " stopped for IDCode " & RIEICodeParameters.IDCode, "L")
			Catch ex As Exception
				RIELogFileHandler.QueueMessage("Error in StopThreads- (_tDatareceivedThread) for " & RIEICodeParameters.PortNO & " for IDCode " & RIEICodeParameters.IDCode & " " & ex.Message, "E")
			End Try
		End If

		_tServerReadingThread = Nothing
		_tServerWritingThread = Nothing
		_tDatareceivedThread = Nothing
	End Sub

	Private Class MsgSentStatus
		Public Msg As String
		Public MsgStatus As Boolean
		Public IDRequestCode As String
		Public SaveOnWaitSate As Char
		Public TimeStamp As Date
		Public MaintainEvenLog As Char
	End Class

	Protected Overrides Sub Finalize()
		MyBase.Finalize()
	End Sub
End Class




Is This A Good Question/Topic? 0
  • +

Page 1 of 1