我现在做一个客户端、服务器通信问题,客户端不与数据库接触,而是服务器去查询数据库;客户端需要发送什么样的命令通知服务器去查询数据并把数据返回给客户端呢?有几个问题需要请教:
1.客户端发送指令的类型,如何定义呢?
2.服务器返回数据结果集的类型?
3.发送数据的大小是否限制,如果太多数据要怎么处理呢?希望大侠们能给个具体实现的代码,比如定义类型,如果发送和接收这些!  刚接触Delphi,对通信没什么概念!诚心求助!谢谢!delphi服务器客户端通信socket

解决方案 »

  1.   

    谈几点基本概念吧。这种通信适合用 TCP 方式来完成,稳定可靠。服务器端是 TCP server,客户端是 TCP client。server 要保持监听状态。客户端每次查询要先请求连接,连接成功后向服务器发送查询命令,服务器根据命令发回查询结果,然后把连接中断。为安全起见,一般要有身份检验机制,要通过用户名和口令检验客户端身份,检验通过后才允许查询。用户名和口令可以事先在数据库建好,也可以通过注册功能动态建立和修改。TCP 是传输层协议,只负责字符串传输,并不解释字符串意义。查询和回应由上层应用协议来完成。应用协议可以自己来构造,这是整个通信的基础,是最繁琐的部分。TCP 协议可以一次传输很大的数据。如果客户端很多,每次传输要限制数据大小,以防止通道堵塞。客户端少的话就无所谓了,甚至可以保持长连接,但是长连接并不可靠,随时可能意外中断。这些不过是基本概念,技术细节还有很多,几句话说不清,要用代码来表达那就是天量了。你不妨先测试一下 TCP 通信,然后慢慢进入情节。
      

  2.   

    本人也刚接触DELPHI在此谈谈我对你问题的一些拙见,请勿见笑。
    关于指令。你可以再一个单元内定义一些常量。
    比如
    DB_Query:Byte=1;
    DB_Get:Byte=2;
    DB_Modify:Byte=3;
    这样的,再比如你查询又要分为按更多东西查询。
    那么你就可以定义集合
    QueryMode=(Name,Index,Number);等等 你需要多少方式就添加多少种集合类型
    这个作为公共单元。你服务端和客户端都要引用的。
    然后就是进行TCP/IP通信了。
    如何组织通信协议呢。
    那么开头就是操作方式了那么你可以用一个控制字符,比如用#吧
    操作模式#具体方式。
    比如你要用名字:王小明查询一个数据库的信息。
    DB_Query#QueryMode#Name.
    这样组合成一个字符串
    就是;
    1#0#王小明
    将这个发给服务端。
    服务端接受到信息后。
    首先分割字符。用#分成3分
    1
    0
    王小明
    那么服务端就知道你是要查询。
    并且模式是用名字。
    名字是王小明。
    进行一番操作之后返回给客户端。客户端再按照一定的结构对服务端返回的数据进行分析
    再显示出来即可。
    通信组件你可以用INDY
    delphi自带的。
    也可以用Jsocket这个控件。小巧方便。
    大概就是这样了。
      

  3.   


    首先谢谢楼上的回答,其次YiLuSuiYun回答,字符串的发送接收感觉不太合理,因为如果有其他字符会涉及到,比如#,那么分割结果就会有问题,有没有其他方式呢?  望指导!
      

  4.   

    简单点来说,客户端发送XML字符串指令,服务端返回XML数据集.
    具体的看你应用是什么样的场景.
      

  5.   

    发送什么命令双方约定好就行,这里有socket例子代码:
    http://download.csdn.net/detail/geoff08zhang/4571358