2013-01-09 4 views
0

네트워크 스트림을 통해 쓰려고하면 문제가 발생합니다.TCP 네트워크 스트림을 통해 쓸 수 없음

여기에서이 버튼을 누르면 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 

하지만 아래의 버튼을 누르면, 상기 버튼을 누르면, I는 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 

미리 감사드립니다.

+0

어떤 오류가 발생합니까? 스택 추적은 무엇입니까? –

+0

오류는 없습니다. 단지 데이터를 전송하지 않습니다. 데이터를 받으면 다른 프로그램에서 문자열을 검사했지만 그렇지는 않습니다. –

+1

디버거를 사용하여 코드를 입력했는지 확인 했습니까? 또한 Write의 반환 값을 확인하지 않고 있어야합니다. 그리고 NetworkStream.Flush는 아무 것도하지 않으므로 제거해야합니다. – tcarvin

답변

0

문제점을 파악했습니다. 그것은 연결이 이루어지는 동안에 만 네트워크 스트림을 읽고 있기 때문입니다. 연결이 만들어진 후 네트워크 스트림을 읽도록 코드를 수정해야합니다.