请教一个网络传输方案!! ( 积分: 200 )

  • 主题发起人 主题发起人 kk2000
  • 开始时间 开始时间
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我的网络架构是这样的.&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库服务器{局域网内}&nbsp;S1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接外网服务器(socket服务器)&nbsp;S2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户端{通过ADSL上网连接S2,&nbsp;socket}C<br>&nbsp;&nbsp;问题是当C向S2请求数据的时候,&nbsp;S2在向S1取得数据,&nbsp;那么取得数据以什么方式传输给<br>C呢?&nbsp;&nbsp;XML或者把每条记录写到流里面进行传输.&nbsp;还有什么好的办法!<br>1.&nbsp;如果是通过XML那么TADOQuery&nbsp;必须保存成XML文件,然后通过流来装载发送给C.<br>C必须把接收传输过来的XML文件,然后进行装载,&nbsp;那么会造成C保存的XML文件过多的问题.<br>2.如果是每条记录写入到流文件里面,那么分析数据比较麻烦,&nbsp;而且数据的装载速度也就是很慢.<br>各位有什么好的方案吗?
 
D6的BDE可以直接打包数据流。ADO就这点不好
 
用的是3层结构么?<br>如果不是的话直接在S2开放一个外网端口映射到S1的数据库服务端口
 
当然是想做三层的拉!
 
d7本身就可以做三层啊,我做有一个三层的网络连锁进销存<br>qq:474482251
 
我想自己做中间层!&nbsp;呵呵。&nbsp;不要笑我啊
 
明白搂主的意思了~~等你做好了我也想看看,学习学习~~<br>1.&nbsp;如果是通过XML那么TADOQuery&nbsp;必须保存成XML文件,然后通过流来装载发送给C.<br>C必须把接收传输过来的XML文件,然后进行装载,&nbsp;那么会造成C保存的XML文件过多的问题.<br>&nbsp;&nbsp;我想这个方法可以的~~只是C不用保存xml文件~~Tclientdataset直接加在xml文件就行了~~或者直接把数据集作为一个variant来出来~~其实他就是xml格式的~~提交更新也一样
 
TClientDataSet提供的一系列的方法<br>你可以把数据以XML的格式取出来<br>然后用任何你想的方法,比如HTTP传到C<br>C在把它放到一个TClientDataSet里面去。<br>SOAP的方法,呵呵
 
既然做3层,中间层放在S2,中间层从S1获取数据,通过&nbsp;DataSetProvider&nbsp;向客户端发送数据即可,哪有那么复杂?
 
使用TClientDataSet中savetostream的方法实现,放到tstream对象中,使用indy的upd或tcp直接传这个对象就可以了,客户端用TClientDataSet.LoadFromStream直接接收就可以了。我使用这个方法,实现了多个三层应用,数据传输不用转换,传输效率比xml高多了。
 
KK2000,不好意思,发个与您这个问题无关的.您学习过IOCP,我想了解一下,学那个从哪里入门比较好,或者有资料可以看,我的邮箱是asksomeone2002@yahoo.com.cn,热切希望向您请教,谢谢~
 
无论传什么数据,在传输时都是字符串,传的时候需要把数据转化成字符串,接受的时候在把字符串转化成相应数据。<br>我的一点认识吧,不知道是否完全正确。xml文件也好,图片,数字,字符串,各类普通文件也好,传输时都要进行相应的处理。<br>我在做三层的时候用的是widestring类来传输这些数据,widestring最大容量为2G,所以一般的大文件都够用了。
 
TO:&nbsp;asksomeone<br>&nbsp;我是先学习&lt;&lt;windows&nbsp;核心编程&gt;&gt;&nbsp;然后就是&lt;&lt;windows&nbsp;网络编程第二版&gt;&gt;<br>然后就开始写IOCP.&nbsp;基本就这样.
 
kk2000,http://www.delphibbs.com/delphibbs/dispq.asp?lid=3548977<br>这边的问题,你最后是解决的,,,我们来讨论一下。。我也在写三层的程序,,,自已写服务器发的时间很长啊。。我现在在DELPHI中用的是MIADS,不过还是不好,,,还是用NET的WEBSERVER,方便就实用,数据全部存成XML进行传输,估计DELPHI这个模式已经过时,,<br>QQ:57313547,希望有机会跟你交流。。。
 
你LZ这个,结构是这样,那么还需要一个通讯协议,有了协议,传输实现就容易写了。<br>最起码你就不会问A数据怎么传,B数据又怎么传。<br><br>最简单的例子就是类似MIDAS.TSocketConnection传输协议,简单的将数据打包成一个数据流发送,前四字节代码包长,后四节代码包类型/命令,其它包体。有了协议,将通讯部分写稳定来,基本就好了。。。<br><br>这个协议别跟ADO扯上关系。协议,只是协议,不是实现。
 
你这种是三层,两层怎么能实现从外网来访问呢
 
To:&nbsp;&nbsp;hzjone<br>&nbsp;&nbsp;谢谢你的支持,&nbsp;我对delphi&nbsp;的midas&nbsp;真的了解好少.&nbsp;可以说不懂.&nbsp;<br>但是&quot;&nbsp;NET的WEBSERVER&quot;&nbsp;这个东西我有个朋友应该是相当熟的了.你可以跟他<br>聊聊.<br>To:&nbsp;errorcode<br>&nbsp;&nbsp;谢谢你的建议,&nbsp;我现在也是采用流的方式传输.&nbsp;感觉还可以.&nbsp;也基本实现了我的要求.<br><br>同时多谢各位参与!
 
多人接受答案了。
 
后退
顶部