用tcpserver发送一个exe文件,是否要先转成二进制数据来发,还是
tcpserver发送时会自动转换?
另外,我的协议规定一桢的数据长度只能是1024个字节,这在发送时怎么控制?
tcpserver发送时会自动转换?
另外,我的协议规定一桢的数据长度只能是1024个字节,这在发送时怎么控制?
解决方案 »
- 简单问题,送分了!!!
- ocx进行数字签名后,在网页中总是出现要求安装的界面,请问怎么办?
- Delphi里的ADO组件里的ADOQuery怎么使用分页?怎么把分页的数据List出来?
- c/s怎么控制客户端的连接数阿
- DBGrid的多行选准及控制 怎么做 急等
- 进来者就是风流倜傥,英俊潇洒,才高八斗,貌似藩安,号称一朵梨花压海棠,送绰号上天下
- 状态栏图标问题
- 如何在DBGrid中固定兩列?
- chris2019(牛虻——饮马流花河)是个流氓,信誉度为0,大家近来看看,千古罕有的骗子,我劝大家不要上当。
- WaveInPrepareHeader函数什么情况下报MMSYSERR_NOMEM错误,
- 100分求高级表格功能:怎么生成双列表格?
- 关于EXCEL的问题。
协议规定一桢1024个字节,你每次读取exe文件时不能超过这个长度,所以一个文件你要分多次读取,分成多个数据包来发送。
buf自己处理。
譬如:
TServerBuf=record
filename:string;
offset:integer;
buffer:array[1000] of byte;
end;
用FileRead循环读取1000字节的文件数据,添到buffer中,然后发送该结构。
var
fs:tfilestream;
begin
fs:=TFileStream.Create('c:\abc.exe',fmOpenRead);
TcpClient1.SendStream(fs);end;
接收用
但是我的协议中是这样的格式:
包头(###)+序号(这个就是分次发送的序号)+内容(1024字节,1k)+包尾
最好你的格式再加一项来表示包的长度,这样比较容易确定包尾。
p:PChar;
FileHandle:integer;FileHandle:=FileOpen(.....);
GetMem(p,1024+20);
写包头到p中
////循环
{
写序号到p中
读取文件1K,写到p中
写包尾到p中
发送该缓冲区p
}
怎么读取1k呢?能否告知