【发布时间】:2012-07-31 22:41:03
【问题描述】:
我正在使用以下代码从特定服务器发送消息
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
send("Hello there")
TextBox1.Text = TextBox1.Text + "Send Successful"
End Sub
Public Sub send(ByVal data As String)
Dim tcpClient As New TcpClient()
Try
tcpClient.Connect("10.xxx.xx.xx", 7000)
TextBox1.text = TextBox1.Text + "Conneecte"
Catch e As Exception
Console.WriteLine(e)
End Try
If tcpClient.Connected Then
Dim networkStream As NetworkStream = tcpClient.GetStream()
Dim streamWriter As New StreamWriter(networkStream)
Console.WriteLine("Messege {0} to {1}", data, tcpClient.Client.RemoteEndPoint)
streamWriter.WriteLine(data)
streamWriter.Flush()
tcpClient.Close()
End If
End Sub
发送成功。
下面的代码是从另一个系统读取的。并且代码挂在do while循环中
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim tcpClient As New System.Net.Sockets.TcpClient()
Try
tcpClient.Connect("10.xxx.xx.xx", 7000)
Dim networkStream As NetworkStream = tcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then
'Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("$gimme")
'networkStream.Write(sendBytes, 0, sendBytes.Length)
' 'Read the NetworkStream into a byte buffer.
Do
Loop Until networkStream.DataAvailable
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
Dim returndata As String = Encoding.ASCII.GetString(bytes)
''Label1.Text = returndata
tcpClient.Close()
Else
If Not networkStream.CanRead Then
tcpClient.Close()
Else
If Not networkStream.CanWrite Then
tcpClient.Close()
End If
End If
End If
Catch ex As Exception
'sLabel1.Text = "Exception Caught"
End Try
End Sub
而且代码挂在这里在读取部分
做 循环直到 networkStream.DataAvailable
我在这里做错了什么?
【问题讨论】:
-
如果你写行,你应该读行。您的发送者和接收者的逻辑不匹配。
-
另外,您一直在循环,直到设置了
DataAvailable标志,但您的代码中没有设置该标志。例如,您不拨打Poll。仅当您执行某些更改其状态的操作时,连接对象才会更改状态。 (如读、写、连接、关闭、轮询等。) -
@DavidSchwartz.. 我只是将 Read 方法更改为 'Dim tcpClient As New TcpClient() Try tcpClient.Connect("10.230.10.33", 7000) TextBox1.Text = TextBox1.Text + "Conneecte " Catch ee As Exception Console.WriteLine(ee) End Try If tcpClient.Connected Then Dim networkStream As NetworkStream = tcpClient.GetStream() Dim reader As New IO.StreamReader(networkStream) Dim str As String = reader.ReadLine() reader。 Close() tcpClient.Close() End If' 读取失败
标签: .net tcpclient tcplistener