最近参考了bdmh朋友
http://hi.baidu.com/jasonggg/blog/item/6de82a86f30a3d3967096e21.html
关于ICS传送数据的例子。//服务器端:
procedure TForm1.ClientDataAvailable(Sender: TObject; Error: Word);
var
S: String;
begin
with Sender as TTcpSrvClient do
begin
S := ReceiveStr;
if SameText(S,'File') then
begin
SendStr('Size');
S := ReceiveStr;
if StrToInt64(S) > 0 then
begin
.....
end;
end;
end;
end;//客户端
procedure TForm1.SendInfo;
begin
WSocket1.SendStr('File');
end;procedure TForm1.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
S: String;
AStream: TMemoryStream;
Size: Int64;
begin
AStream := TMemoryStream.Create;
try
AStream.LoadFromFile('d:\....');
AStream.Position := 0;
S := WSocket1.ReceiveStr;
Size := AStream.Size;
WSocket1.SendStr(IntToStr(Size));
.....
finally
FreeAndNil(AStream);
end;
end;不知道为什么不能交互呢?
以前没有用过ICS,还请勿怪!
对了还要请问下文件传送是怎么做的呢?非常感激朋友们了!
http://hi.baidu.com/jasonggg/blog/item/6de82a86f30a3d3967096e21.html
关于ICS传送数据的例子。//服务器端:
procedure TForm1.ClientDataAvailable(Sender: TObject; Error: Word);
var
S: String;
begin
with Sender as TTcpSrvClient do
begin
S := ReceiveStr;
if SameText(S,'File') then
begin
SendStr('Size');
S := ReceiveStr;
if StrToInt64(S) > 0 then
begin
.....
end;
end;
end;
end;//客户端
procedure TForm1.SendInfo;
begin
WSocket1.SendStr('File');
end;procedure TForm1.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
S: String;
AStream: TMemoryStream;
Size: Int64;
begin
AStream := TMemoryStream.Create;
try
AStream.LoadFromFile('d:\....');
AStream.Position := 0;
S := WSocket1.ReceiveStr;
Size := AStream.Size;
WSocket1.SendStr(IntToStr(Size));
.....
finally
FreeAndNil(AStream);
end;
end;不知道为什么不能交互呢?
以前没有用过ICS,还请勿怪!
对了还要请问下文件传送是怎么做的呢?非常感激朋友们了!
BufferedData := BufferedData + ReceiveStr;
然后每次都只在BufferedData当中判断,只在判断准确了,然后就把取到的部分删除
MyPacketData := Copy(BufferedData, 1, PacketLength);
Delete(BufferedData, 1, PacketLength);
A: SendStr('Start');
SendStr(需要传的文件第一行)
SendStr(需要传的文件第二行)
......
SendStr(需要传的文件最后一行)
B: BufferedData := BufferedData + ReceiveStr;
最后MyPacketData := Copy(BufferedData, 1, PacketLength);
if MyPacketData = 'Start' then
begin
Delete(BufferedData, 1, PacketLength);
end; 此时BufferedData就是文件内容不知道我的理解对不对?
这时如何获取BufferSize呢?这个BufferSize得事先定义一个最大值?
先SendStr(BufferSize) -> ReceiveStr(BufferSize)然后再Send(Buffer,Buffersize) -> ReceiveStr(Buffer,BufferSize)吗?这样ICS用起来还真有点不方便。谢谢你这么多次帮助!
而一次receive到的只有aaab后面的bbccc需要下一次Receive.或者有可能对端先Send出来的是aaa,接着send出来的是bbb再接着send出来的是ccc
而你可能第一次收到的是aaab第二次收到的是bbccc
看来我得好看看同步与异步之间的差异。
顺便提一下Indy,它能完全做到我所说的方式交互,是不是就是同步模式下的好处呢?