ServerSocket 讀取資料的問題 |
答題得分者是:h@visli
|
ken.hsiao
一般會員 發表:17 回覆:15 積分:6 註冊:2007-03-14 發送簡訊給我 |
請教一下各位前輩,小弟利用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 發送簡訊給我 |
最土的方法, 如以下紅字, 不知可不可行?
===================引 用 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 發送簡訊給我 |
一、用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 發送簡訊給我 |
將指標改至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碼的資料刪除呢?
------
程式沒有這麼難 只是還沒打通其中要絕 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |