在c/s结构中,客户端发送文件发送请求,单个信息的时候发送出去服务器响应很及时,很准确! 但是使用数组中的文件请求,顺次发送,最后一个请求发送完成!服务端才会反映响应请求,而且只是在最后一个都发送完成的时候才会响应,搞的我两个文件的发送,是第一个文件的名字,最后一个文件的内容!处理的是第一个请求,只在最后才响应发送成功的信息开始存储进去的文件内容的发送! 请问这种逻辑错误好解决吗? 难道是因为我一直在发送文件请求,发送数据,所以服务端的控件无法检测数据是否接受完毕! 多个文件的发送,我以为有数据到达就会触发服务端的响应机制! 代码没提取出来,所以无法让光临的前辈现场操刀!太大了! 所以,呵呵,咨询一下我的逻辑思路是不是很有大的问题,对了我主要是基于tcp协议的传输!
在c/s结构中,客户端发送文件发送请求,单个信息的时候发送出去服务器响应很及时,很准确! 但是使用数组中的文件请求,顺次发送,最后一个请求发送完成!服务端才会反映响应请求,而且只是在最后一个都发送完成的时候才会响应,搞的我两个文件的发送,是第一个文件的名字,最后一个文件的内容!处理的是第一个请求,只在最后才响应发送成功的信息开始存储进去的文件内容的发送! 请问这种逻辑错误好解决吗? 难道是因为我一直在发送文件请求,发送数据,所以服务端的控件无法检测数据是否接受完毕! 多个文件的发送,我以为有数据到达就会触发服务端的响应机制! 代码没提取出来,所以无法让光临的前辈现场操刀!太大了! 所以,呵呵,咨询一下我的逻辑思路是不是很有大的问题,对了我主要是基于tcp协议的传输!
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(),要不然你给我邮箱地址,我把代码给你看看!
解决办法很多:
1、插入Doevents是一个最简单的解决办法,但也可能会难以控制请求与响应的流程顺序,是否适用要根据情况酌情考虑。
2、若对顺序性要求很高,采用应答事件驱动方式逐条收发,是最稳绥也最常用的办法。这虽然也算自动的批量处理,但会使通讯效率下降。
3、对数据定义一种带有识别标志的头部信息,收发双方可根据头部信息自行分析数据类型与顺序,再统一处理。这种方式可以一次性发送多条请求,也可分辨出收到的响应是哪条请求的响应。这才是真正意义上的批处理。