飞鸽传书在局域网中传文件实在太方便了,今天不知道哪根筋出问题,想来模拟一下.于是直接动手.飞鸽的架构其实不难,说实在的很容易看出来.但是就是这个很容易,让我吃了苦.
第一次我的想法采用异步事件加上upd组播.这个代码不难,当我做完了测试嗅探其他计算机的时候,upd组播的消息竟然不会让事件受信.绑定的地址是本机地址,但是受信的地址却是upd组播的地址.于是这样的想法直接被打消了.但是解决这个问题当然有其他办法咯.那就是异步消息.它不会管你是数据怎么传来的,只要有数据就会投递fd_read消息.于是试着写.
当完成代码后.我进行了测试,拿朋友的三台计算机进行嗅探,成功了,果然不出我预料.于是在传输数据的是,因为是局域网,速度非常快,因此没考虑用流套接字发送,于是直接采用的udp,非常方便.而且很简单.最麻烦的地方到了,就是传输文件.文件一次性绝对不能完成的,所以我分成一次读一点数据传然后采用我们老总的思想,一问一答的方式,让他采用iocp模型,很快完成了,而消息的验证,因为只是测试,我就只是简单的定义了几个字符串,在文件传递完成了后发送一个标志.本来想到会浪费很多时间在网络.却意想不到的事情发生了.
我用了3个多小时来考虑了文件的读写.一个编程那么久的人了,还读这么久?我也觉得郁闷!,下面就是这个问题的描述.读文件按常理,读出的文件名可以直接利用.但是我编程环境是vista,别忽略这句话.他用的d3d10,简单点说就是com,大家都知道com把?只支持unicode,而不支持ansi,这个问题的忽略导致我读文件读了n久没有正确过.当我读文件找到原因修改完后.于是写文件.我就茫然了,读文件是二进制,写文件也是二进制把,但是我写进去了打开文件后是乱码,我郁闷死了,于是我改成读ansi的方式,成功了...我闷了半天,于是我写文件本来长度是256,但是后面很多数据没用为0不需要写进文件,于是我取了字符串长度,然后把需要的写进文件,函数执行成功,但是没数据!继续郁闷!
于是问了一个朋友,他也搞了半天,也不知道为什么!于是让我清醒意识到几个问题,要么以后全用unicode编程否则就别在vista下编程.还有一点切记啊,要么用c语言的函数读写文件,要么用api,千万少用c++的文件流,bug太多了,我这是第五次了,我朋友也有!郁闷!
一共做了5个小时,难的时间花少了,简单的花多了,也不知道这在说明什么问题!
老总一句经典的话:计算机是不会背叛你的........