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
uj5u.com熱心網友回復:
這已經火力全開了uj5u.com熱心網友回復:
這個問題一直如此啊,來回的問。1.速度多快其實不是你能控制的。你只是往發送緩沖區寫資料。
2.發送資料其實是系統底層接管的
所以能多快起決定意義的物理帶寬,物理網卡,以及對方的接收速度(因為你實際發送對方也不是立刻收的,他會先到接識訓沖區
uj5u.com熱心網友回復:
3M/s其實已經OK百兆上行頂破天就5M/s,下行10M/s
uj5u.com熱心網友回復:
同時也看對方的接收速度,如果對方不及時從緩沖區移除資料,那么tcp會發等待的。(沒有ack回復我得等,或者重新發,或者error)如果你理解不了,請看下面得文章
TCP/IP之TCP協議(3):流量控制(滑動視窗協議)
https://blog.csdn.net/wbw1985/article/details/4879224
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/28054.html
標籤:VB.NET
