研究飞鸽传书
飛鴿傳書在局域網中傳文件實在太方便了,今天不知道哪根筋出問題,想來模擬一下.于是直接動手.飛鴿的架構其實不難,說實在的很容易看出來.但是就是這個很容易,讓我吃了苦.
?
第一次我的想法采用異步事件加上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個小時,難的時間花少了,簡單的花多了,也不知道這在說明什么問題!
?
老總一句經典的話:計算機是不會背叛你的........
?
飛鴿傳書簡介
ipmsg飛鴿傳書系統即時通訊
飛鴿傳書局域網聊天工具
飛鴿傳書內部護眼神功
XEIM 飛鴿傳書數據庫說明
飛鴿傳書正則表達式
總結
- 上一篇: A review of 3D/2D re
- 下一篇: [Medical Image Proce