廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 6454 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
mok789
數位造型
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 路人甲 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++][求助] 有關於winsock傳檔(使用C++)
   各位高手大家好,最近我們老師介紹有關Winsock的傳輸協定,在介紹完之老師要我們寫一個可以傳輸檔案的Socket,老師叫我在
   <===基維百科中搜索有關winsock,就能找到相關的例題,我也下載來看,好不容易已大概知道,沒個function大概的程式,但我發現幾個問題,我說明的CODE我就PO出來 ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:台灣教育部 | Posted:2009-12-11 14:03 |
totsi
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x53
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

1.改connect的對象IP就可以了。Ex:IPsaServer.sin_addr.s_addr = inet_addr( "192.168.1.1" )
但請確定遠端有用相同的IP與port在進行listening。

2.我沒有看程式內容,不過一般client你是不需要指定IP給他的,只有server在進行bind與listening的時候,你需要指定IP。所以當你client要連向server的時候,你的確是要指定server IP給client,不然client是不知道server的IP是多少。除非client內部有server的清單,或是client可自動去尋找server,這樣才不用指定IP給他。

3.我不是c++的強的高手,只是個打雜小弟而已,只是剛好最近也在碰這些東西。其實檔案也是由一堆文字(ASCII)或數值(binary)所組成的。所以你只要會傳字串,那麼傳檔就只是把檔案內的文字讀進來,然後將其當字串傳出就好。然後再接收端寫入到所指定的檔案內即可。當然Binary也是可以用相同的方式去做,且binary的傳檔方式會比較通用,可支援各種格式的檔案。

  唯一要注意的是讀寫檔與資料傳輸時如有發生遺失的例外處理,其他的就與一般常用的傳字串的方式一樣。

在c++底下,winsock的send與receive並沒有將string與binary分開(以前玩VB的時候印象VB.net有將Sendstring與Sendbinary分成兩個函式來使用)。所以只需將您所要傳輸的資料cast成char*給send就可以了。

這邊要傳檔的話,會建議您使用struct來傳那些資料,這樣在處理上也會比較方便。至於要怎麼把struct丟給send用的話,一樣用cast (char*)就可以了。

因為最近被壓榨的很嚴重,所以就沒辦法提供sample了。 表情

希望對您有幫助 表情


[ 此文章被totsi在2009-12-21 11:58重新編輯 ]

此文章被評分,最近評分記錄
財富:50 (by 三仙) | 理由: ^^ 因為您的參與,讓程式設計更容易!!


恩...
獻花 x1 回到頂端 [1 樓] From:台灣中華電信 | Posted:2009-12-14 08:45 |
mok789
數位造型
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 路人甲 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感謝高手的回答︿︿
--------------------------------------------------
socket的中間程序我都先跳過,直接到傳送那

把檔案打開->轉成二進制->放入陣列->傳送出去(一直傳到陣列中沒DATA) = 傳送
收到DATA後->把二進制還原成檔案 = 接收

我在想我是不是一次改太多了,不知道有什麼方法,可以驗證以上的個個步驟


獻花 x0 回到頂端 [2 樓] From:台灣教育部 | Posted:2009-12-15 16:43 |
mingtw
數位造型
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 路人甲 該用戶目前不上站
推文 x0 鮮花 x6
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

Comm Operator 應該可以幫你做一些簡單的傳輸測試.


獻花 x0 回到頂端 [3 樓] From:台灣中華電信 | Posted:2009-12-16 09:24 |
totsi
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x53
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

還有如果要自己做測試的話,最簡單的就是自定檔案格式,還有一個parser。
傳完檔後用自己的parser去驗證格式是否正確,以及內容資料是否可讀出來就知道了。

大概一個for loop就可以做完所有的事情了吧

格式部分可以重複,只是你要去計數說傳檔前有幾個,收檔後的結果是否與傳檔前一致。

以上是找不到現成軟體可用的偷吃步的方法。XD

希望對您有幫助。 表情


恩...
獻花 x0 回到頂端 [4 樓] From:台灣中華電信 | Posted:2009-12-17 09:06 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.064275 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言