Vb.net TCP侦听器连接在发送确认/响应之前关闭

Vb.net TCP侦听器连接在发送确认/响应之前关闭,vb.net,tcp,client,response,Vb.net,Tcp,Client,Response,我正在编写一个TCP侦听器(服务器),它需要接收消息并发送回确认。非常基本的东西。这里有几十个例子,包括MSDN,我从中复制了很多代码。我可以收到信息,没问题。当我试图发回回复时,问题就出现了。发送客户端(Corepoint HL7引擎)报告以下错误: 在收到响应之前,连接已关闭 我已经用我自己的TCP发送测试应用程序(使用从MSDN复制的代码编写)测试了我的服务,它可以正常工作。但当我从Corepoint收到消息时,响应不会返回 下面是我的代码。有人知道NetworkStream.Write方

我正在编写一个TCP侦听器(服务器),它需要接收消息并发送回确认。非常基本的东西。这里有几十个例子,包括MSDN,我从中复制了很多代码。我可以收到信息,没问题。当我试图发回回复时,问题就出现了。发送客户端(Corepoint HL7引擎)报告以下错误:

在收到响应之前,连接已关闭

我已经用我自己的TCP发送测试应用程序(使用从MSDN复制的代码编写)测试了我的服务,它可以正常工作。但当我从Corepoint收到消息时,响应不会返回

下面是我的代码。有人知道NetworkStream.Write方法为什么没有实际发送数据(或者为什么客户端没有接收数据)吗?我已经尝试了我在其他帖子中发现的与我的问题类似的所有想法,但没有任何效果。我是做错了什么,还是Corepoint的配置有问题

Sub Main()
   listenThread.Start()
End Sub

Private serverSocket As TcpListener
Dim listenThread As New Thread(New ThreadStart(AddressOf ListenForClients))

Private Sub ListenForClients()
   Dim port As Int32 = '(pick a port #)
   Dim localIP As IPAddress = 'enter your IP

   serverSocket = New TcpListener(localIP, port)
   serverSocket.Start()

   While True  'blocks until a client has connected to the server
      Dim client As TcpClient

      If serverSocket.Pending Then
         client = serverSocket.AcceptTcpClient
         'tried these 2 settings with no effect
         'client.NoDelay = True     
         client.Client.NoDelay = True

         ProcessIncomingMessageSocketTCPClient(client)   'I was doing this in a separate thread but temporarily kept it on this thread to eliminate threading as the possible cause (but no luck)
         client.Close()
      Else
         Threading.Thread.Sleep(1000) 'wait 1 second and poll again            
      End If
   End While
End Sub

Private Sub ProcessIncomingMessageSocketTCPClient(ByRef objClient As TcpClient)

   Dim strMessageText As String
   Dim clientStream As NetworkStream
   Dim msgBuffer(4096) As Byte
   Dim numberOfBytesRead As Integer
   Dim strChunk As String
   Dim strCompleteMessage As New Text.StringBuilder
   Dim sendBytes As Byte()

   clientStream = objClient.GetStream()

   Do
      numberOfBytesRead = clientStream.Read(msgBuffer, 0, msgBuffer.Length)
      strChunk = Encoding.ASCII.GetString(msgBuffer, 0, numberOfBytesRead)
      strCompleteMessage.AppendFormat("{0}", strChunk)
   Loop While clientStream.DataAvailable
   strMessageText = strCompleteMessage.ToString

   sendBytes = Encoding.ASCII.GetBytes("I received a message from you")
   clientStream.Write(sendBytes, 0, sendBytes.Length)
   objClient.Close() 'tried it with and without this line

End Sub

结果证明我的代码没有问题。TCP过去和现在工作正常。这个应用程序是一个HL7侦听器,我缺少环绕我的ACK的MLP。我一加上,发送应用程序就接受了我的确认,一切正常。

您是否尝试过不关闭轮询循环中的客户端?通常这种行为是因为您在实际从连接中获取数据之前故意关闭了连接(或结束了程序)。是的,我已经尝试过了。这没什么区别