vb.net用socket发送大量数据给单片机stm32F4,速度只有3M字节/秒,有什么办法可以提高到10M字节/秒吗

wuganxiu 2020-05-02 09:37:42
vb.net用socket发送大量数据给单片机stm32F4,速度只有3M字节/秒,有什么办法可以提高到10M字节/秒吗,因为我也一个单片机发,一个单片机收,速度可以做到10M字节/秒,单片机接收是可以处理过来的,网络方面需要怎么配置,这是我的上位机代码
Imports System.Net.Sockets
'使用到TcpListen类
Imports System.IO
'使用到StreamWriter类
Imports System.Net
'使用IPAddress类、IPHostEntry类等
Imports System.Threading
Public Class Form1
Private swWriter As StreamWriter
'用以向网络基础数据流传送数据
Private nsStream As NetworkStream
'创建发送数据的网络基础数据流
Dim tcpClient1 As TcpClient
'通过它实现向远程主机提出TCP连接申请
Private tcpConnect As Boolean = False
'定义标识符,用以表示TCP连接是否建立
'Private s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
' Dim bytes(1024) As Byte ' 用来存储接收到的字节
' Dim ss As Socket = s.Accept() '若接收到,则创建一个新的Socket与之连接
Dim fa(0 To 29200 - 1) As Byte
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ipRemote As IPAddress
Dim tcpClient As TcpClient
Try
ipRemote = IPAddress.Parse(TextBox1.Text)
Catch
MessageBox.Show("输入的IP地址不合法!", "错误提示!")
Return
'判断给定的IP地址的合法性
End Try
Try
tcpClient = New TcpClient(TextBox1.Text, 8088)
'对远程主机的8000端口提出TCP连接申请
nsStream = tcpClient.GetStream()
'通过申请,并获取传送数据的网络基础数据流
swWriter = New StreamWriter(nsStream)
'使用获取的网络基础数据流来初始化StreamWriter实例
Button1.Enabled = False
Button2.Enabled = True
tcpConnect = True
StatusBar1.Text = "已经连接!"
Catch
MessageBox.Show("无法和远程主机8089端口建立连接!", "错误提示!")
Return
End Try
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim i As Integer
Dim a As Byte = 1
' Dim tcpClient As TcpClient


For i = 0 To 29200 - 1
fa(i) = 3
Next
Call sample0()


End Sub

Private Sub Form1_Disposed(sender As Object, e As System.EventArgs) Handles Me.Disposed
If tcpConnect Then
swWriter.WriteLine("STOP")
'发送控制码
swWriter.Flush()
'刷新当前数据流中的数据
nsStream.Close()
swWriter.Close()
'清除资源 ( )
End If
tcpClient1.SendBufferSize = 29200
If Disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(Disposing)
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
tcpClient1.SendBufferSize = 29200
End Sub



Sub sample0()
Dim sample0_Thread As New Thread(AddressOf sample0_printI)
tcpClient1 = New TcpClient

tcpClient1.SendBufferSize = 29200
sample0_Thread.Start()
TextBox3.Text = tcpClient1.SendBufferSize
' Console.Write("End")
End Sub

Sub sample0_printI()
Dim a As Integer = 1
Try
Do

nsStream.Write(fa, 0, 29200)
swWriter.Flush()
Loop While a = 1
Catch
MessageBox.Show("无法和远程主机8089端口建立连接!", "错误提示!")
Return
End Try
End Sub

End Class
...全文
203 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-07-01
  • 打赏
  • 举报
回复
同时也看对方的接收速度,如果对方不及时从缓冲区移除数据,那么tcp会发等待的。(没有ack回复我得等,或者重新发,或者error) 如果你理解不了,请看下面得文章 TCP/IP之TCP协议(3):流量控制(滑动窗口协议) https://blog.csdn.net/wbw1985/article/details/4879224
wanghui0380 2020-07-01
  • 打赏
  • 举报
回复
3M/s其实已经OK 百兆上行顶破天就5M/s,下行10M/s
wanghui0380 2020-07-01
  • 打赏
  • 举报
回复
这个问题一直如此啊,来回的问。 1.速度多快其实不是你能控制的。你只是往发送缓冲区写数据。 2.发送数据其实是系统底层接管的 所以能多快起决定意义的物理带宽,物理网卡,以及对方的接收速度(因为你实际发送对方也不是立刻收的,他会先到接收缓冲区
wurst115 2020-07-01
  • 打赏
  • 举报
回复
这已经火力全开了

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧