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

ServerSocket 讀取資料的問題

答題得分者是:h@visli
ken.hsiao
一般會員


發表:17
回覆:15
積分:6
註冊:2007-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-09 11:09:54 IP:59.126.xxx.xxx 訂閱
請教一下各位前輩,小弟利用ServerSocket來讀取網路上卡鐘的資料 程式碼如下

{讀取資料}
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var S:String;
MM : TStringList;
i : integer;
Buff : Array[1..1024] of Char;
MS : TMemoryStream;
FS : TFileStream;
begin
if RecFlag=1 then
begin
if GG = 'T' then //讀取指紋
begin
i := Socket.ReceiveLength; //封包長度
Socket.ReceiveBuf(Buff, i); //接收封包
MS := TMemoryStream.Create;
MS.Write(Buff, i);
MS.Position := 0;
MS.SaveToFile('fl0');
MS.Clear;
GG := '';
end;
end;
end;

小弟把接收的資料存入buffer中,在將buffer中的資料存入stream中,最後在將stream存入檔案中
問題是存入的資料中前27碼並不是想要的資料,該如何作才能將前27碼的資料刪除呢?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-09 15:11:46 IP:61.67.xxx.xxx 未訂閱
最土的方法, 如以下紅字, 不知可不可行?
===================引 用 ken.hsiao 文 章===================
請教一下各位前輩,小弟利用ServerSocket來讀取網路上卡鐘的資料 程式碼如下

{讀取資料}
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var S:String;
MM : TStringList;
i ,j: integer;
Buff : Array[1..1024] of Char;
mBuff: Array[1..1024] of Char;
MS : TMemoryStream;
FS : TFileStream;
begin
if RecFlag=1 then
begin
if GG = 'T' then //讀取指紋
begin
i := Socket.ReceiveLength; //封包長度
Socket.ReceiveBuf(Buff, i); //接收封包
for j:= 28 to i do mBuff[j-27]:= Buff[j];

MS := TMemoryStream.Create;
MS.Write(mBuff, i-27);
MS.Position := 0;
MS.SaveToFile('fl0');
MS.Clear;
GG := '';
end;
end;
end;

小弟把接收的資料存入buffer中,在將buffer中的資料存入stream中,最後在將stream存入檔案中
問題是存入的資料中前27碼並不是想要的資料,該如何作才能將前27碼的資料刪除呢?
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-10 09:15:21 IP:218.18.xxx.xxx 未訂閱
一、用PChar类型作buffer
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
i: integer;
Buff: PChar;
MS: TMemoryStream;
begin
i := Socket.ReceiveLength; //封包長度
GetMem(Buff, i);
try
Socket.ReceiveBuf(Buff^, i); //接收封包
MS := TMemoryStream.Create;
MS.Write(Buff[27], i - 27);
MS.Position := 0;
MS.SaveToFile('fl0');
MS.Free;
finally
FreeMem(Buff);
end;
end;

二、用String作Buffer
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
i: integer;
S: String;
MS: TMemoryStream;
begin
S := Socket.ReceiveText;
MS := TMemoryStream.Create;
MS.Write(S[28], Length(S) - 27);
MS.Position := 0;
MS.SaveToFile('fl0');
MS.Free;
end;
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
shunaaron
高階會員


發表:13
回覆:94
積分:106
註冊:2006-10-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-12 11:10:40 IP:59.124.xxx.xxx 訂閱
將指標改至MS.Position := 27呢?
===================引 用 ken.hsiao 文 章===================
請教一下各位前輩,小弟利用ServerSocket來讀取網路上卡鐘的資料 程式碼如下

{讀取資料}
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var S:String;
MM : TStringList;
i : integer;
Buff : Array[1..1024] of Char;
MS : TMemoryStream;
FS : TFileStream;
begin
if RecFlag=1 then
begin
if GG = 'T' then //讀取指紋
begin
i := Socket.ReceiveLength; //封包長度
Socket.ReceiveBuf(Buff, i); //接收封包
MS := TMemoryStream.Create;
MS.Write(Buff, i);
MS.Position := 0;
MS.SaveToFile('fl0');
MS.Clear;
GG := '';
end;
end;
end;

小弟把接收的資料存入buffer中,在將buffer中的資料存入stream中,最後在將stream存入檔案中
問題是存入的資料中前27碼並不是想要的資料,該如何作才能將前27碼的資料刪除呢?
------
程式沒有這麼難
只是還沒打通其中要絕
系統時間:2024-04-25 18:56:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!