关于网络传输的简单问题 BY CJ(50分)

  • 主题发起人 主题发起人 CJ
  • 开始时间 开始时间
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
定义了一个RECORD,如何通过SOCKET传输?用SOCKET
如果搞大了是对象呢?(对象传输好象比较麻烦)

最近我的问题没人回答,难道大家对我有意见?
如果有告诉我吧
 
总因该定义一个格式,
其实,socket传输的不过是二进制,
你可以自己定义他的格式,好象,
比如 是包含几个string的record
就应该把string做上标记,接收过去
以后再重新组合成record.
(我记得,好象讨论过,传递后的顺序大乱了)

至于对象,那么比较麻烦,要不然,怎么有
RMI,或着远程对象调用呢?

想当然!:-)
 
CJ:不要多心!大家会对你有什么意见?
可能是你的问题比较难.....:-%
 
那就先RECORD吧,给个EXAMPLE就给分
 
有没有什么 RECORD TO STREAM之类的东西?
 
对象就有,直接TmemoryStream.WriteComponent,当然此对象必须至少从
TPersistent派生,对于非Published 属性要自己重载DefineProperty
我写过用Sockets发送对象的程序,CJ兄有没有兴趣?
 
Record也不难吧,直接用TMemoryStream的方法逐个写入Record的各个值,然后
顺序读出就行了。
 
当然有,也不必那么复杂,只要 RECORD 就可以
比如我定义了一个人事管理的记录,然后打包,发送
最好有例子,就可以,麻烦TQZ兄了
 
我以前写过这样的一个简单程序,所谓的网络白板,写着玩的,呵呵
最近比较忙,所以没空另写,也没空改了。或许它会有所帮助。
别怪我写得难看,我没准备给人看的:)
<a href="ftp://202.120.100.49/pub/WhiteBoard/WhiteBoard.zip">Whiteboard</a>
建议采用强力下载工具,否则本校的网络...hehe
 
TQZ大侠公里深厚,小弟实在看不懂
谁能给个看的懂的例子?只要 RECORD 就可以
 
似乎ACE也问了一个类似的问题,现将答案再贴一遍
type
TMyRecord = record
//...
end;
var
ARec: TMyRecord;
Buf: array [0..SizeOf(TMyRecord)-1] of Char;
begin
Move(Buf, ARec, SizeOf(TMyRecord));
end;
 
接收呢?也可以MOVE吗?
 
收到数据后,判断是否完整,是则Move也可呀。
 
说到电子了,问题就是不知道完整不完整,乱MOVE出问题的
 
用指针把RECORD转换成字节型数据发送,接收时进行逆转换。
例:
type
aRecordDef=record
sEx:string;
.....
end;

procedure PutData;
var
pRecord:^aRecordDef;//记录指针
buf:array[0..100] of byte; //数组
begin
pRecord:=@(buf[0]);
//记录赋值
pRecord^.sEx:=.....;
.....
//结束,也可用pRecord^:=antherRecord的方式
//然后,就是发送buf数据
...
end;

procedure PutData;
var
pRecord:^aRecordDef;//记录指针
buf:array[0..100] of byte; //数组
begin
//接收数据到buf
....
//
pRecord:=@(buf[0]);
//记录取值
antherRecord:=pRecord^;
...
end;
 
如果是对象,好象可以用定义buf绝对地址的方法解决。
就是让buf的起始地址与对象的地址相同。
至于定义绝对地址的关键字,...,忘了。
 

Similar threads

后退
顶部