当前位置:编程学习 > VB >>

VB UDP 传数据的问题 救命!

大于7K 8K 就不能传的
怎么分开传?给我说说实际的操作方法,我是UDP
传的是字符串
我传的时候总是不成功,我是采用通过长度进行循环来传的。循环6K一次。
就是传的次数为 len(str)/ 6*1024
每次6K  
不知道是不是循环的问题
但是客户端不响应,我还是在本机做测试的
或者是只响应一次,接收第一次发送的6K 数据
希望大家帮帮我啊,困惑我太久了,我是新手
--------------------编程问答-------------------- MsgBox "一共需要传送数据 " & CStr(Len(tmpstr) / 1024) & " K"
           For i = 0 To Len(tmpstr) / (1024 * 6)

              strper = Mid(tmpstr, 1, 1024 * 6)
              If strper <> "" Then

                  UdpServer.SendData strper
              End If
              MsgBox "服务端第" & i + 1 & "次发送数据" & Len(strper) / 1024 & "K"
              
              tmpstr = Mid(tmpstr, 1024 * 6 + 1)
 
           Next i
这是我的代码!
新手 大家给点方法 不要骂我哈 --------------------编程问答-------------------- 顶上去 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢楼上两位 继续顶 --------------------编程问答-------------------- SendData 是需要时间的,必定等前一次完成才能发下一次。
Option Explicit

Private m_IsComplete As Boolean
Private m_IsError   As Boolean

Private Sub Command1_Click()
    MsgBox "一共需要传送数据 " & CStr(Len(tmpstr) / 1024) & " K"
    For i = 0 To Len(tmpstr) / (1024 * 6)

        strper = Mid(tmpstr, 1, 1024 * 6)
        If strper <> "" Then

            m_IsComplete = False
            m_IsError = False
            
            udpServer.SendData strper
            
            While (Not m_IsComplete) And (Not m_IsError)
                DoEvents
            Wend
            
            If m_IsError Then Exit Sub
        End If
        MsgBox "服务端第" & i + 1 & "次发送数据" & Len(strper) / 1024 & "K"

        tmpstr = Mid(tmpstr, 1024 * 6 + 1)

    Next i
End Sub

Private Sub udpServer_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox Description, vbCritical
    m_IsError = True
End Sub

Private Sub udpServer_SendComplete()
    m_IsComplete = True
End Sub
--------------------编程问答-------------------- SendData 是需要时间的,必定等前一次完成才能发下一次。
Option Explicit

Private m_IsComplete As Boolean
Private m_IsError   As Boolean

Private Sub Command1_Click()
    MsgBox "一共需要传送数据 " & CStr(Len(tmpstr) / 1024) & " K"
    For i = 0 To Len(tmpstr) / (1024 * 6)

        strper = Mid(tmpstr, 1, 1024 * 6)
        If strper <> "" Then

            m_IsComplete = False
            m_IsError = False
            
            udpServer.SendData strper
            
            While (Not m_IsComplete) And (Not m_IsError)
                DoEvents
            Wend
            
            If m_IsError Then Exit Sub
        End If
        MsgBox "服务端第" & i + 1 & "次发送数据" & Len(strper) / 1024 & "K"

        tmpstr = Mid(tmpstr, 1024 * 6 + 1)

    Next i
End Sub

Private Sub udpServer_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox Description, vbCritical
    m_IsError = True
End Sub

Private Sub udpServer_SendComplete()
    m_IsComplete = True
End Sub
--------------------编程问答-------------------- 谢谢楼上的,我还在用你的进行测试
好像还是有问题
我自己也弄糊涂了
我是接收端接收数据以后需要其他处理。
所以接受以后需要判断是否接受完毕,我通过最后一个特殊字符进行判断的
接收没有完成则等待服务端会继续发送





--------------------编程问答-------------------- 发送和接收是完全独立的两个个体,不知道你要表达什么意思! --------------------编程问答-------------------- 我希望的是发送方发送一次 接收方接收一次
接收方每次接收以后进行判断是否传输完毕
如果完毕则进行下一步处理
没有完毕则继续等待服务端发送
大概就是这个意思

谢谢你了 --------------------编程问答-------------------- 大虾们  帮帮忙啊···
SOS --------------------编程问答-------------------- 继续顶上去···
大于6K 的数据的传输还是不行 --------------------编程问答-------------------- 系统有个默认缓冲,一般是8192字节,而且udp模式下如果数据大于这个数量就会出现末尾数据丢失的情况。建议一次传输少一点数据,宁可多传输几次。 --------------------编程问答-------------------- 楼上说的这个我知道
我就是不知道如何来分开数据传啊
菜鸟·· --------------------编程问答-------------------- 用末尾标记的方式不好,你不能保证分段数据的末尾肯定不是末尾标记。
可用在发送数据前先发送一个信息头,告诉对方整个数据长度为多少。在前面的代码中修改就可以了。
接收端大致如下
Private m_Data As String
Private m_TotalSize As Long
Private m_RecivedSize As Long

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    Winsock1.GetData strData, vbString
    
    If m_TotalSize = 0 Then
        m_TotalSize = 解析信息头(strData)
        m_Data = vbNullString
        m_RecivedSize = 0
    Else
        m_Data = m_Data & strData
        m_RecivedSize = m_RecivedSize + Len(strData)
        
        If m_RecivedSize >= m_TotalSize Then
            处理整个数据(m_Data)
            m_TotalSize = 0
        End If
    End If
End Sub

--------------------编程问答-------------------- 要分开的,分多次传
补充:VB ,  网络编程
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,