XE ServerSocket接收WideString |
答題得分者是:Victor4022
|
ttnnrsseb
中階會員 發表:31 回覆:77 積分:51 註冊:2004-11-22 發送簡訊給我 |
請教各位先進,
我用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; 我把紅字的地方放到全域變數就不會有錯誤了! |
Victor4022
中階會員 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
您好,抱歉,手邊沒有任何開發環境,您的問題應該是"資料大小"不一致。
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 發送簡訊給我 |
感謝您的回覆,我有試過,不過還是一樣。
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 發送簡訊給我 |
[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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |