我正在尝试通过Visual Basic .NET中的stream
传输数据
我尝试下一个:
客户端:
tcpclnt = New TcpClient()
tcpclnt.Connect("127.0.0.115", 40000)
clientstream = tcpclnt.GetStream()
Dim I As Integer
Dim msg() As Byte
For I = 1 To 1000
msg = BitConverter.GetBytes(I) ' HERE IS THE PROBLEM
clientstream.Write(msg, 0, msg.Length)
Next
服务器:
Public Shared bytes(1024) As Byte
Public Shared data As String = Nothing
Server = New TcpListener(IPAddress.Any, 40000)
Server.Start()
' ... some server routine
Dim serverstream As NetworkStream = myClient.GetStream()
Dim i As Int32
i = serverstream.Read(bytes, 0, bytes.Length)
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
Invoke(Sub() TextBox3.Text = "Received: " + data)
问题是:要从流中获取数据,它必须是Byte()类型。因此,要将数据放入流中,它也必须位于Byte()中。但我想传输整数(例如1000)。它转换为4个字节,当服务器读取它时,它采用四个不同的符号,而不是数字1000!
而不是1000
我有两个空格。
答案 0 :(得分:1)
您必须使用BitConverter.ToInt32
服务器端。请注意,代码将比您编写的代码稍微复杂一些,因为无法保证Read()
将返回您请求的字节数,因为例如TCP数据包可以分成两部分({{3 }})。
代码应为:
Dim ix As Integer = 0
Dim bytes As Byte() = New Byte(3) {}
While ix < bytes.Length
Dim read As Integer = serverstream.Read(bytes, ix, bytes.Length - ix)
ix += read
End While
Dim i As Integer = BitConverter.ToInt32(bytes, 0)
答案 1 :(得分:0)
谢谢你的完美答案,@ xanatos。 我找到了另一种方法并使用它,所以我也想发布它。
我用这种方式:
For I = 1 To 1000
msg = Encoding.UTF8.GetBytes(Convert.ToString(I))
clientstream.Write(msg, 0, msg.Length)
Next
我认为你的解决方案在控制包方面更好,我会用它来传输数字数据,但对于我目前的情况,我使用了我的解决方案。