SOS !!! 请问使用SOCKET时,如何传送记录型 数据????(50分)

  • 主题发起人 主题发起人 海马
  • 开始时间 开始时间

海马

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友:
请帮我分析一下,如何传送以下记录型数据???

msgaddsubreq=record
msgcominfo_t:Record
devent:word;
dlen :word;
dnods :word;
dserverid:word
end ;
msgoperator_t:record
id:word;
name:array[1..11] of char;
password:array[1..9] of char
end;
msgsub_info_t:record
sub_isdn:array[1..21] of char;
sub_name:array[1..21] of char;
sm_allowed:byte;
chinese_support:byte
end;
end;


 
我遇到的是同一个问题,把分值提高点吧!
 
可是这样
msgaddsubreq->msgoperator_t->id := 3892893
.....
 
用Block块传递方式

对于主类型,再定义一个指针
Pmsgaddsubreq=^msgaddsubreq;

var
P : Pmsgaddsubreq;
T : msgaddsubreq;
... ...
T.msgcominfo_t.devent := 123;
T. ... ...

P := @T;
Stream.SetSize(SizeOf(msgaddsubreq));
Move(P^,Stream.Memory^,SizeOf(msgaddsubreq));
Stream.Position := 0;
......
把这个二进流通过Socket传出去,对方以相同反方法取出

使用指针可以让很多难题得到解决,不过要小心,也易出大事。
 
socket只是提供一种通讯的方式,它从不关心使用者所传输的内容。
因此只要你自己制定的上层通讯协议无误就不存在问题。
 
可以直接用TServerSocket和TClientSocket传送吧。
ServerSocket.Connections[0].Socket.SendBuf(Buf, Sizeof(Buf);
ClientSocket.Socket.SendBuf(Buf,Sizeof(Buf);

var
amsgaddsubreq:msgaddsubreq;
Socket.SendBuf(Amsgaddsubreq, Sizeof(msgaddsubreq));
 
>>>>>>hexi 对

>>>>>>hehe ,来晚了


 
>>>>> socket 如同管道,二进制如同水,你的纪录如同容器

在一端到入水时,用什么容器,在接受时也用什么容器,否则水还是水,可喝水的人
可能就不认为它正确的流过来了
管道本身,只要是水就可以,它不管你的水原来是在什么容器(是纪录,对象,还是
integer)里.
 
hexi:我赞同.
可是如何定点clientsocket,怎样确定connections[1]对应的是哪一个?
还望赐教,谢谢!
 
很简单,利用SOCKET.DATA,他是一个指针,可以在这定义用户信息。
 
socket.connections[1].RemoteAddr
RemoteAddress
RemoteHost
RemotePort
 
接受答案了.
 

Similar threads

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