0

ネットワーク ストリームを介して書き込もうとすると、問題が発生します。

ここでこのボタンを押すと、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

前もって感謝します!

4

1 に答える 1

0

私は問題を理解しました。これは、接続中にのみネットワーク ストリームを読み取っているためです。接続が確立された後、ネットワーク ストリームを読み取るようにコードを変更する必要があります。

于 2013-01-11T04:24:13.123 に答える