全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1980
推到 Plurk!
推到 Facebook!

BCB6 與 XE7 TClientSocket 控件問題

答題得分者是:GrandRURU
clajeke
一般會員


發表:8
回覆:14
積分:4
註冊:2011-10-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-01-22 17:25:40 IP:59.124.xxx.xxx 訂閱
同樣的程式碼
我在BCB6
Socket->SendBuf
Socket->ReceiveBuf
收的到預期的數字

可是我在XE7
看回傳的ReceiveBuf
不管者樣都是0

想請教一下
BCB6 跟 XE7
使用上字碼長度有不一樣嗎?

附上大概程式碼

[code cpp]
char RxBuf[512];
char TxBuf[8];

ClientSocket ->Socket->SendBuf(TxBuf,TxBuffer.Length);
ClientSocket ->Socket->ReceiveBuf(RxBuf,512);
[/code]

BCB6 接收都正常
XE7 就是沒東西
程式就是對設備讀值而已

GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2023-04-28 13:42:27 IP:59.120.xxx.xxx 未訂閱
在 BCB6 和 XE7 中使用的字碼長度應該是一樣的,因為兩者都是 C++Builder 的不同版本,並且都支援同樣的字元集。因此,如果您的程式碼在 BCB6 中運作正常,但在 XE7 中無法正常運作,可能是因為 TClientSocket 控件在不同版本的 C++Builder 中有些許不同,或是在編譯時的差異造成的問題。
建議您可以檢查以下幾個可能引起問題的原因:
  1. 接收資料的長度 您在 XE7 中的 ReceiveBuf 的第二個參數是 512,可能需要調整為您預期接收的資料長度,以避免接收到不完整的資料。
  2. Socket 連線狀態 在傳送和接收資料之前,請確認 TClientSocket 控件的連線狀態是否正確。您可以使用 Connected 屬性檢查連線狀態,例如:

    [code cpp]
    if (ClientSocket->Active && ClientSocket->Connected) {
    // 傳送和接收資料的程式碼
    }

    [/code]
  3. 資料緩衝區大小 您在傳送資料時,使用了 TxBuffer.Length,可能需要確認 TxBuffer 的大小是否足夠。同樣地,在接收資料時,您使用了 512 的緩衝區大小,也可能需要調整為實際需要接收的資料大小。
字元集編碼 如果您的程式碼處理了字串,請確認在 BCB6 和 XE7 中使用的字元集編碼是否一致。在不同的版本和操作系統中,字元集可能會有所不同,例如 ANSI、UTF-8、UTF-16 等等,需要確保程式碼中使用的字元集編碼一致。
希望以上提供的幾個建議能夠幫助您解決問題。如果仍有疑問,建議您可以提供更詳細的程式碼或錯誤訊息,以便更準確地判斷問題所在。

系統時間:2024-03-29 0:28:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!