server端是个单片机...我负责写client部分。
这个server端很烂,动不动就不响应动作.....winsock控件的senddata是异步的,只要送到缓冲就返回成功,这个完全没法用于判断是否发送成功。理论上说sendcomplete事件应当是缓冲区的数据发送结束并且接收到server端确认后才能触发,可是实际我监控程序TCP底层传输时,当winsock发送了PSH数据之后并没有收到server的ACK指令就触发了sendcomplete事件。望高手指点一下,到底怎么样才能监控到数据正确传输到server端呢... 或者winsock还有别的事件在收到server的ACK时触发?
这个server端很烂,动不动就不响应动作.....winsock控件的senddata是异步的,只要送到缓冲就返回成功,这个完全没法用于判断是否发送成功。理论上说sendcomplete事件应当是缓冲区的数据发送结束并且接收到server端确认后才能触发,可是实际我监控程序TCP底层传输时,当winsock发送了PSH数据之后并没有收到server的ACK指令就触发了sendcomplete事件。望高手指点一下,到底怎么样才能监控到数据正确传输到server端呢... 或者winsock还有别的事件在收到server的ACK时触发?
解决方案 »
- 求助:VB操作Excel的一段代码
- VB 的InBufferCount的值会变化
- 想请问:在VB里如何来制作帮助文件?
- treeview如何才能在From_Load时某个节点自动被选中
- 打包vb程序为安装软件!!!!在线等待!!!!!!!!!
- 大家进来看看 http://expert.csdn.net/Expert/topic/1218/1218857.xml?temp=.8011133
- 呵呵,又来送分了!如果是好的例子不够再加分!决不食言!
- 请问怎样能使VB能调用系统默认的电子邮件客户程序编辑器
- 怎样在程序运行时改变label的容器对象,如label1本属于于picturebox1 ,想在运行时改为pictureBox2,如何实现?
- 请问有什么函数能将date类型的数据转换成字符类型,并去掉年月日之间的横线??
- 怎么把一个MDI窗体改成普通的窗体?
- 新手提问:窗体之间的转换
你在Error 中添加相关代码,看有没有发生错误.
我的疑惑是sendcomplete事件并不是在client受到ACK确认后触发的,而是在PSH包发送后就触发了。
我的想法是想办法监控client收到的ACK确认,当发送后一段时间(比如1秒)尚未收到ACK就视同此次发送失败。在程序上关掉该连接重新尝试。当然这种行为可能会导致server端收到重复的数据。但是没关系,我的应用可以接受这种情况。
我很长时间没用VB了,有些细节记不清了,提些思路你考虑一下。我以前用Winsock进行通讯的时候,并不喜欢用sendcomplete来判断另一端是否接受到,因为你并不知道数据在从一端到另一端的时候,中间都需要经过哪里。以前做这种程序,我一般喜欢是由接收端端自己发回一个消息来帮助发送端判断,这种方式也有利于发送端进一步判断接收端的状态,因为我们可以用不同的返回的命令来表示接收端的情况。出于很早以前写232串口通讯的习惯,我一般都习惯在用winsock的时候也加上一层自己的协议,格式一般是“start_flag cmd lenth cnt end_flag”,start_flag和end_flag是成对出现的,代表了需要传送的一包,cmd是你自己定义的一些命令,这些一般都是通信层需要的一些命令,比如测试链接、正常数据、接收正常等,lenth是cnt的长度,cnt是你真正通过winsock传递的东西。用类似这种方式来传递消息,坏处是你需要自己去判断来自winsock的各种数据,从中找出数据头、数据尾等;好处一是我们可以把数据的封装单独拿出来,以便以后改成比如usb通信、232通信等,二是你可以不用去关心winsock协议到底是怎么传的,因为我们自己定义了一层协议,winsock仅是一个通道。仅供参考。