开发需要,由我用Java来编写一个中间层程序,即Application Server。功能主要就是接收客户端的请求,将该请求发送到服务端,然后将服务端返回的结果返回给客户端。服务端的接口是公开的,基于CORBA构件标准的。比如取个人基本信息
GRJBXX getPersonInfo(string IDCardNo,string operator,string password,string opername);即传入个人的身份证号,当前操作员的代码、姓名和密码,返回个人基本信息结果。
客户端程序是用C#写的,这样,我事先也是在c#中定义一个相同传入传出参数的方法,方法的实现,主要就是:通过socket与中间层建立连接,然后将4个输入参数传给中间应用服务器,将返回个人基本信息结果。
现在,我的问题是:这4个参数怎么通过socket发送给中间层?一个一个发送呢?还是合并成一个string来发送?
如果采用的合并的方式,到了中间层通过什么来拆分?同样,个人基本信息结果怎么从中间层返回给客户端?
以前没有写过socket通信程序,见笑了。

解决方案 »

  1.   

    一个xml格式的String是比较好的方案吧!
    <root>
      <param1>value1</param1>
      <param2>value2</param2>
      <param3>value3</param3>
      <param4>value4</param4>
    </root>
      

  2.   

    TCP的话就是byte stream,没有什么一个个发送还是合并发送的概念,只有你怎么区分不同消息的概念。自己设计通讯协议是必须的。对于这种不定长度的String,你可以用分隔符param1|param2|param3。这种类型有隐患,因为用户可以输入任何字符,你还得自己转义。另一种方法就是用8username8password10cardnumber这种方法,规定字符串之前一定是数字,而这个数字代表了字符串长度。参考ByteBuffer和nio的Channel API
      

  3.   

    你之前没写过 Socket 相关东西的话,那你第一个程序很难写好,Socket 里的东西坑实在是太多了!
      

  4.   

    那你得自己设计个简单的通讯协议来,将你的四个字段,按协议拼接成byte数组,然后通过socket发送过去。不推荐全部弄成string,不方便解码,且扩展性不好,例如以后还要增加字段。
    可以这样设计:
    int IDCardNo (4字节)
    可变长的字段,则需要这样一种数据格式
    id(int(4))length(int(4))content(读取的length的值)
    即id代表是哪个字段,通过协议自己定,length代表你这个字段内容的长度,读取content时,需要通过length的值来读取对应字节即可。
    通过这个结构来拼接一下三个字段的byte数组
    string operator
    string password
    string opername当最终获取到一个byte数组,然后通过socket发送到另外一端,再以这种协议格式解码出来即可。
      

  5.   

    果断XML,自定义请求格式与响应格式,相当于简单的报文吧