【问题标题】:Cannot Write Over TCP Network Stream无法通过 TCP 网络流写入
【发布时间】:2013-01-20 22:54:21
【问题描述】:

我在尝试通过网络流写入时遇到问题。

当我在这里按下这个按钮时,我可以成功写入tcp流并且程序的另一部分成功接收到数据。

Dim ClientSocket As TcpClient

Private Sub btnConnect_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles btnConnect.MouseClick

          ClientSocket = New TcpClient

          ClientSocket.Connect(frmNetworkSettings.txtServerIPAddress.Text, CInt(frmNetworkSettings.txtFileSharingPort.Text))

          Dim NetworkStream As NetworkStream = ClientSocket.GetStream()

          If NetworkStream.CanRead And NetworkStream.CanWrite Then

                 Dim SentData As Byte()

                 SentData = Encoding.ASCII.GetBytes(Username & Chr(32) & "is connected." & Environment.NewLine)

                 NetworkStream.Write(SentData, 0, SentData.Length())

                 NetworkStream.Flush()

          End If

End Sub

但是当我按下下面这个按钮时,按下上面的按钮后,我无法在tcp网络流上写入,并且网络上的其他程序没有收到数据。

Private Sub btnDisconnect_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles btnDisconnect.MouseClick

         Dim NetworkStream As NetworkStream = ClientSocket.GetStream()

         If NetworkStream.CanRead And NetworkStream.CanWrite Then

                Dim SentData As Byte()

                SentData = Encoding.ASCII.GetBytes(Username & Chr(32) & "is disconnected." & Environment.NewLine)

                NetworkStream.Write(SentData, 0, SentData.Length())

                NetworkStream.Flush()

         End If

End Sub

其他详情:

这是在其他程序上接收数据的部分。

Private Sub ConnectionTimer_Tick(sender As Object, e As System.EventArgs) Handles ConnectionTimer.Tick

    Try

        If Listener.Pending Then

            ClientSocket = Listener.AcceptTcpClient

            Dim ByteData(ClientSocket.ReceiveBufferSize) As Byte

            Dim NetworkStream As NetworkStream = ClientSocket.GetStream

            Dim LogMessage As String = String.Empty

            NetworkStream.Read(ByteData, 0, CInt(ClientSocket.ReceiveBufferSize))

            LogMessage = Encoding.ASCII.GetString(ByteData)

            DisplayLogMessage(LogMessage)

        End If

    Catch ex As Exception

        MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Try

End Sub

提前致谢!

【问题讨论】:

  • 你得到什么错误,堆栈跟踪是什么?
  • 没有错误。它只是不发送数据。我检查了另一个程序上的字符串是否接收到数据但没有。
  • 你有没有用调试器走过去看看你是否输入了代码?此外,您没有检查 Write 的返回值,您应该检查。并且 NetworkStream.Flush 没有做任何事情,应该被删除。
  • 好的,但是如何检查 Write 的值?

标签: .net vb.net tcpclient networkstream


【解决方案1】:

我发现了问题所在。这是因为我仅在建立连接期间才读取网络流。建立连接后,我应该修改我的代码以读取网络流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多