我使用下面的代码从一个特定的服务器TCP读写问题.NET
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
发送消息和发送成功。
而下面的代码是从另一个系统读取。和代码挂在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
DO和代码挂在这里的读取部分
不要 循环,直到networkStream.DataAvailable
我在做什么错在这里?
如果你正在写行,你应该读行。您的发件人和收件人的逻辑不匹配。 –
此外,您正在循环,直到设置DataAvailable标志,但代码中没有设置该标志。例如,您不要调用“投票”。如果您执行一些更改其状态的操作,则连接对象只会更改状态。 (如读,写,连接,关闭,轮询等) –
@DavidSchwartz ..我只是将读取方法改为'Dim tcpClient As New TcpClient() 尝试 tcpClient.Connect(“10.230.10.33”,7000 ) TextBox1.Text = TextBox1.Text + “Conneecte” 捕捉EE作为异常 Console.WriteLine(ee)的 结束Try 如果tcpClient.Connected然后 昏暗的NetworkStream作为的NetworkStream = tcpClient.GetStream() 昏暗读取器作为新的IO.StreamReader(networkStream) Dim str As String = reader.ReadLine() reader.Close() tcpClient.Close() End If'and it fail to r ead – Sujima