在c/s结构中,客户端发送文件发送请求,单个信息的时候发送出去服务器响应很及时,很准确!    但是使用数组中的文件请求,顺次发送,最后一个请求发送完成!服务端才会反映响应请求,而且只是在最后一个都发送完成的时候才会响应,搞的我两个文件的发送,是第一个文件的名字,最后一个文件的内容!处理的是第一个请求,只在最后才响应发送成功的信息开始存储进去的文件内容的发送!    请问这种逻辑错误好解决吗?    难道是因为我一直在发送文件请求,发送数据,所以服务端的控件无法检测数据是否接受完毕!    多个文件的发送,我以为有数据到达就会触发服务端的响应机制!    代码没提取出来,所以无法让光临的前辈现场操刀!太大了!    所以,呵呵,咨询一下我的逻辑思路是不是很有大的问题,对了我主要是基于tcp协议的传输! 

解决方案 »

  1.   

    应该还是你的代码用问题。注意一下 Index 是否正确,是否使用了同一个数组成员。
      

  2.   

    '将文件信息整理放进数组,通过遍历数组确定完成多个文件的发送!
    Private Sub sure_Command_Click()    Dim ffolder(4) As String
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        
        ffolder(0) = Trim(fname_text0.Text)
        ffolder(1) = Trim(fname_text1.Text)
        ffolder(2) = Trim(fname_text2.Text)
        ffolder(3) = Trim(fname_text3.Text)
        ffolder(4) = Trim(fname_text4.Text)
        
          
        For k = 0 To 4
            If ffolder(k) <> "" Then
                Call SendQueSendFileCmd(ffolder(k), MAX_FRAME_LEN, Trim(pho_text.Text))
                Debug.Print "文件" & k & "发送完毕!"
            End If
        Next
        
        Load sendFileProgressDlg
        sendFileProgressDlg.Label1 = "正在发送请求给服务器"
        sendFileProgressDlg.Show vbModal
    End Sub我确定这个发送文件请求的index,没有错误! of123(),要不然你给我邮箱地址,我把代码给你看看!
      

  3.   

    用winsock基于文件的传输,连续的文件怎么传递,我的传递结果执行完了以后是被封装了在一个文件里面???
      

  4.   

    有数据到达就会触发服务端的响应机制,这点是不容置疑的,但是要做出响应动作必须得有获得CPU时间的机会,VB是单线程工作的,在处理发送数据时,没有机会去处理数据到达事件。同样,发送数据时,若没有释放CPU,也同样不会立即发送,只会让数据在缓冲中堆集,多条数据最终会连接在一起发送。
    解决办法很多:
    1、插入Doevents是一个最简单的解决办法,但也可能会难以控制请求与响应的流程顺序,是否适用要根据情况酌情考虑。
    2、若对顺序性要求很高,采用应答事件驱动方式逐条收发,是最稳绥也最常用的办法。这虽然也算自动的批量处理,但会使通讯效率下降。
    3、对数据定义一种带有识别标志的头部信息,收发双方可根据头部信息自行分析数据类型与顺序,再统一处理。这种方式可以一次性发送多条请求,也可分辨出收到的响应是哪条请求的响应。这才是真正意义上的批处理。
      

  5.   

    to homezj呵呵,谢谢啊,这个帖子我天天看着看统计数据,但是一直以为没有人响应(可能眼睛看错了……)恩,我被逼急了,然后就断点一步一步的跟踪调试,把逻辑的走势和自己想要的结果硬靠,后来就调通了,刚好是你所描述的第2种方式!应答的响应方式,因为我对于请求发送成功了还需要处理缓冲区里面所封装的,那么联合发送的可能混乱的方式我对自己没绝对的把握,毕竟vb没熟悉几天,而且领导说了工作和学习不一样,要出效率!呵呵,谢谢大家了!问题解决了,理论补充了,圆满结帖 :)