十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
串口通信最終都是用二進制傳輸?shù)模阌么a把二進制轉(zhuǎn)化成十六進制就可以了。不需要額外設(shè)置。
公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出文登免費做網(wǎng)站回饋大家。
我不給你代碼了,我才編了SOCKET的,告訴你原理吧(我的編程經(jīng)驗而已)
SOCKET傳輸文件和接受是有大小限制的,默認是81**來則也就是8K多,你可以改小,但改大我沒試過,然后你必須把文件分成若干份,然后傳過去,然后在接收端組合起來,同時接收端的接受大小要和發(fā)送大小統(tǒng)一。
至于你說的文件名,文件名不屬于文件數(shù)據(jù)中的一部分,它不參與數(shù)據(jù)傳輸?shù)?,你只能在接收端重新改名字?/p>
同時為什么要用上面的方法傳呢,因為VB.NET中的SOCKET有很多問題,我就為此煩過,因為要丟包(理論上TCP不存在),或者粘包,或者斷包,也就是你在接收端獲取文件時數(shù)據(jù)是要出錯的,比如你定長3000B,結(jié)果接收端可能先收到2000B,當接受端接受后,處理會出錯的。
所以SOCKET的標準發(fā)送方法是建立定長的結(jié)構(gòu)體(結(jié)構(gòu)體必須定義為可序列化結(jié)構(gòu)體),最好結(jié)構(gòu)體里面至少包含有 1,文件名,2,本包序號,3,本包數(shù)據(jù),比如每個包大小3040B,文件名占20,序號占20,數(shù)據(jù)占3000,然后發(fā)送出去,接收端每次固定接受3040B,如果接受到的包沒有這么大(比如收到2000),那么繼續(xù)接受(1040),直到達到3040后組合成一個包,在把包分解成結(jié)構(gòu)體,相同的文件名為一個文件,再按照序號按次組合其中的數(shù)據(jù),這就完成了傳輸。這樣的方法還可以同時傳送多個文件,因為結(jié)構(gòu)體里面包含了文件名和序列號,不會錯亂,如果是大文件,請不要接收完畢后(最后一個包的序號可以為-1,或者包里包含總長度,檢查到序號為-1時表示完畢,或者達到總長度后表示完畢)再組合,因為這樣會浪費電腦內(nèi)存,最好的方法是一邊接受數(shù)據(jù),一邊寫入到文件中(收到第一個包時就建立文件,以后每個包的數(shù)據(jù)都往里面寫)。
回答你的問題:
1、經(jīng)過上面的傳輸后,文件是不變化的,MD5檢查都是正常的,不用擔心文件大小有變化(如果有變化,那就是代碼沒編對)
2,、文件名問題,我前面提到了,文件名是不參與傳輸?shù)?,它不屬于?shù)據(jù)中的一部分,比如同一個文件,不管你怎么改名字MD5是不變的。你只能通過把文件名想辦法傳給對方(比如我上面說的結(jié)構(gòu)體方法),讓對方寫入文件時使用。
3,代碼:
還是給你找找吧,等等
不行,我的都很大,很長,你還是在網(wǎng)上找吧,有很多例子,我也是網(wǎng)上學(xué)的。
傳輸Integer 數(shù)據(jù)類型來傳輸比較方便.因為Integer 的取值可以是0x0000-0xFFFF .當你把數(shù)據(jù)發(fā)送到目的主機后可以利用Hex() 把接收到的數(shù)據(jù)從十進制轉(zhuǎn)換到十六進制..