線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1424
推到 Plurk!
推到 Facebook!

XE ServerSocket接收WideString

答題得分者是:Victor4022
ttnnrsseb
中階會員


發表:31
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-06-08 17:09:32 IP:220.229.xxx.xxx 訂閱
 請教各位先進,
我用ClientSocket將WideString用SendBuf送給ServerSocket,
只要字串長度大於8就會出現錯誤,但是接收、顯示是正常的。
不知這錯誤是哪邊引起的?

Client:

procedure TForm1.Button1Click(Sender: TObject);
var
Sendtx: WideString;
begin
Sendtx := Edit1.Text;
ClientSocket1.Socket.SendBuf(Sendtx,Length(Sendtx));
end;



Server:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
RTW: WideString;
BufSize: integer;
Buf: array of WideChar;
begin
BufSize := Socket.ReceiveLength;
if BufSize > 0 then
begin
SetLength(Buf,BufSize);
Socket.ReceiveBuf(Buf,BufSize);
RTW := WideString(Buf);
Memo1.Lines.Add(RTW);
end;
end;



我把紅字的地方放到全域變數就不會有錯誤了!
編輯記錄
ttnnrsseb 重新編輯於 2011-06-08 03:10:18, 註解 無‧
ttnnrsseb 重新編輯於 2011-06-08 03:11:31, 註解 無‧
ttnnrsseb 重新編輯於 2011-06-08 03:16:32, 註解 無‧
Victor4022
中階會員


發表:0
回覆:76
積分:90
註冊:2011-02-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-06-08 22:40:44 IP:122.126.xxx.xxx 訂閱
您好,抱歉,手邊沒有任何開發環境,您的問題應該是"資料大小"不一致。

SizeOf(WideChar) = 2 bytes,您Client 傳送給 Server 的長度是 Length(String),資料大小短少一半。


===================引 用 ttnnrsseb 文 章===================
請教各位先進,
我用ClientSocket將WideString用SendBuf送給ServerSocket,
只要字串長度大於8就會出現錯誤,但是接收、顯示是正常的。
不知這錯誤是哪邊引起的?

Client:

procedure TForm1.Button1Click(Sender: TObject);
var
Sendtx: WideString;
begin
Sendtx := Edit1.Text;
ClientSocket1.Socket.SendBuf(Sendtx,Length(Sendtx) * SizeOf(WideChar) );
end;



Server:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
RTW: WideString;
BufSize: integer;
Buf: array of WideChar;
begin
BufSize := Socket.ReceiveLength;
if BufSize > 0 then
begin
SetLength(Buf,BufSize div SizeOf(WideChar));
Socket.ReceiveBuf(Buf,BufSize);
RTW := WideString(Buf);
Memo1.Lines.Add(RTW);
end;
end;



我把紅字的地方放到全域變數就不會有錯誤了!
ttnnrsseb
中階會員


發表:31
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-06-09 09:23:25 IP:220.229.xxx.xxx 訂閱
感謝您的回覆,我有試過,不過還是一樣。
AV錯誤的地方是藍色end; 時才會發生的。
傳送的字串是有正常收到顯示的。

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
RTW: WideString;
BufSize: integer;
end;



我把紅字的地方放到全域變數就不會有錯誤了!
編輯記錄
ttnnrsseb 重新編輯於 2011-06-08 19:25:01, 註解 無‧
Victor4022
中階會員


發表:0
回覆:76
積分:90
註冊:2011-02-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-06-09 09:58:32 IP:114.34.xxx.xxx 訂閱

[code delphi]

procedure TForm1.Button1Click(Sender: TObject);
var
Sendtx: WideString;
begin
Sendtx := Edit1.Text;
ClientSocket1.Socket.SendBuf(Sendtx[1],Length(Sendtx) * SizeOf(WideChar) );
end;



Server:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
RTW: WideString;
BufSize: integer;
begin
BufSize := Socket.ReceiveLength;
if BufSize > 0 then
begin
SetLength(RTW,BufSize div SizeOf(WideChar));
Socket.ReceiveBuf(RTW[1], BufSize);
Memo1.Lines.Add(RTW);
end;
end;
[/code]

ttnnrsseb
中階會員


發表:31
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-06-09 10:31:25 IP:220.229.xxx.xxx 訂閱
 測試OK了!
感謝先進的指導,看來我基礎還要多多加強!
系統時間:2024-03-29 1:39:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!