ServerSocket 向 ClientSocket发送记录型数据的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 138075
  • 开始时间 开始时间
1

138075

Unregistered / Unconfirmed
GUEST, unregistred user!
type TUser = record
Name: string[16];
NickName: string[16]
Money: currency;
end;

type TApp = record
Name: string[16];
Version: string[16];
end;

ServerSocket 分别向 ClientSocket 发送这2个记录型的数据,
ver
User: TUser;
app: TApp;
begin
user.name := 'asd';
user.nickname := 'ddd';
user.money := 3000;
SvrSocket.Socket.sendbuf(User,SizeOf(TUser));
sleep(0);
App.name:= 'asdfafafadf';
App.version := '1.0';
SvrSocket.Socket.sendbuf(App,SizeOf(TApp));
end;

客户端自然的也定义了1个TUser 和 1个TAPP;
但是,客户端的 ClientSocket 怎么接收?
我怎么知道服务器发来的是哪个record ?
 
type TUser = record
Name: string[16];
NickName: string[16]
Money: currency;
end;

type TApp = record
Name: string[16];
Version: string[16];
end;

ServerSocket 分别向 ClientSocket 发送这2个记录型的数据,
ver
User: TUser;
app: TApp;
begin
user.name := 'asd';
user.nickname := 'ddd';
user.money := 3000;
SvrSocket.Socket.sendbuf(User,SizeOf(TUser));
sleep(0);
App.name:= 'asdfafafadf';
App.version := '1.0';
SvrSocket.Socket.sendbuf(App,SizeOf(TApp));
end;

客户端自然的也定义了1个TUser 和 1个TAPP;
但是,客户端的 ClientSocket 怎么接收?
我怎么知道服务器发来的是哪个record ?
 
我也不是特别清楚 只是随便说一下
定义一个TMemoryStream和另一个结构体Tcc123
发送方
type Tcc123 = record
Key : Boolean;
Data : TMemoryStream;
end;
ver
User: TUser;
app: TApp;
cc123 : Tcc123;
begin
user.name := 'asd';
user.nickname := 'ddd';
user.money := 3000;
cc123.Key := True //标志
cc123.Data := TMemoryStream.Create;
cc123.Data.write(user,sizieof(user)); //内容
SvrSocket.Socket.sendbuf(cc123,SizeOf(cc123));
cc123.Data.free;
sleep(0);
App.name:= 'asdfafafadf';
App.version := '1.0';
cc123.Key := False; //标志
cc123.Data := TMemoryStream.Create;
cc123.Data.write(App,sizieof(App)); //内容
SvrSocket.Socket.sendbuf(cc123,SizeOf(cc123));
cc123.Data.Free;
end;
然后在接收方也定义Tcc123这个结构体
var cc123 : Tcc123;
begin
cc123.Data := TMemoryStream.Create;
if cc123.Key = true then
begin
cc123.Data.Read(User,cc123.Data.Size);
..... {处理User的代码}
end else
being
cc123.Data.Read(App,cc123.Data.Size);
..... {处理App的代码}
end;
cc123.Data.Free;

不过是随便写了写 表现表现我的这个思路 至于能不能跑 我不敢保证! 主要就是用了TMemoryStream什么都能装进去的特性
 
当然 还有第二种方法 呵呵
你为什么不用一个结构体呢?
type Tcc123 = record
UserName: string[16];
NickName: string[16];
Money: currency;
AppName: string[16];
Version: string[16];
end;
然后把东西都装到这个结构体里
 
我不可能每次都要全部发送所有的东西吧?假入有10个定义好的结构,我按不同的时间去取不同的结构啊
 
1.协议;
2.转换到流来发;
 
数据量很大的话怎么办
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3271999
很好用
 
客户,服务都定义记录,然后收发报都读写内存的方式,然后做2个事setbody,getbody。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
691
import
I
I
回复
0
查看
817
import
I
后退
顶部