try
//发送文件的内容
GetMem(bufSend, iBYTEPERSEND);
iNum := fsSend.Read(bufSend^, iBYTEPERSEND);
FormMain.ClientSocket.Socket.SendBuf(bufSend^, iNum);
FormChat.Memo1.Lines.Add('Send Buf finished');
finally
FreeMem(bufSend);
end;
如何在每次发送的数据前面加上特定的开始和结束的标记,例如:'*’等
//发送文件的内容
GetMem(bufSend, iBYTEPERSEND);
iNum := fsSend.Read(bufSend^, iBYTEPERSEND);
FormMain.ClientSocket.Socket.SendBuf(bufSend^, iNum);
FormChat.Memo1.Lines.Add('Send Buf finished');
finally
FreeMem(bufSend);
end;
如何在每次发送的数据前面加上特定的开始和结束的标记,例如:'*’等
iNum := fsSend.Read(Pchar(bufSend+1), iBYTEPERSEND);
bufSend[0] := '*'
就行了。
var
P : Pchar;
begin
GetMem(P,3);
Strcopy(Pchar(P+1),'aa');
P[0] := 'A';
Showmessage(P);
FreeMem(P);
end;
这样显示的结果是'Aaa'
fsSend:TFileStream;
这句代码会出错?
iNum := fsSend.Read(Pchar(bufSend+1), iBYTEPERSEND);
P : Pchar;
bufSend : Pchar;....GetMem(bufSend, iBYTEPERSEND+1);
P := bufSend+1;
iNum := fsSend.Read(P, iBYTEPERSEND);
bufSend[0] := '*'
GetMem(bufSend, iBYTEPERSEND+1);
P := bufSend+1;
iNum := fsSend.Read(P, iBYTEPERSEND);
bufSend[0] := '*';
FormMain.ClientSocket.Socket.SendText(BufSend,iBYTEPERSEND);
为何不行啊?
Const
iBYTEPERSEND = 1024;
var
fm : TFileStream;
S : String;
P : PChar;
begin
fm := TFileStream.Create('D:\ASP\UpFile.txt',fmOpenRead);
SetLength(S, iBYTEPERSEND+1);
P := Pchar(S);
fm.Read(S[2], iBYTEPERSEND);
P[0] := '*';
FormMain.ClientSocket.Socket.SendText(BufSend,iBYTEPERSEND);
fm.Free;
SetLength(S,0);
end;
应该是
FormMain.ClientSocket.Socket.SendText(P,iBYTEPERSEND+1);
因为你增加了一个长度
FormMain.ClientSocket.Socket.SendText(P);那相当的接收呢,我的代码收不到数据:
//接收文件
try
fsRecv:=TMemoryStream.Create;
GetMem(bufRecv, iBYTEPERSEND);
iNum := ClientSocket.Socket.ReceiveBuf(bufRecv^, iBYTEPERSEND);
fsRecv.WriteBuffer(bufRecv^, iNum);
finally
FreeMem(bufRecv);
end;{of try}
fsRecv.SaveToFile('C:\aaa.doc');
fsRecv.Free;
不知错在哪?