最近在做一个系统,是C/S模式的,纯JAVA编程的。现在已经可以和服务器连接了,用的是套接字TCP的  
    在客户端我需要进行数据库的查询和更新 我想问下如何把这个语句传给服务器,应该我有不止一个的SQL语句 比如在客户端里面有A,B,C三大模块都要用到数据库查询  
A: select * from A1xxx;
B: select * from A3xxx;update 。。操作
C:select * from A1xxx;insert 等操作 
  那怎么样才能确保A通过套接字流传给服务器的是A的而不是B或者C的,即A发A接收。对于B,C同样确保发和接收不是传给别的

解决方案 »

  1.   

    回复楼上的问题,你可以尝试专门写几个类来封装你的消息类型,通过  "类名".equals(类名.getclass())来区分。我也是做JAVA的C/S模式的毕业设计,客户和服务端都需要不断的消息接收消息,这个功能没有做出来,刚好看到你也是做C/S的,请问你有什么方法解决没?
      

  2.   

    你传送的时候加个TCP头嘛比如要发送abcde给服务器
    发的时候这样发
    out.write(0x01);
    out.write("abcde");服务器端接收以后先解析第一位命令
    根据不同的命令执行不同的动作这就是个简单的TCP协议了
      

  3.   

    那我想问下 加入A和B同时发信息给服务器 是不是加不同的TCP头??有没什么原理啊?什么TCP头啊??服务器如何才能保证等下回的信息是给A或者B的 确保不会发错呢,是不是也要加一个头??  谢谢啊
      

  4.   

    汗啊...你自定义一个传输协议啊
    比如从客户端发送给服务器的消息中
    a发送的消息命令是0x00
    b发送的消息命令是0x01
    服务器根据命令来分发不同的请求同样的服务器给客户端传送时,加上不同的命令不就行了
      

  5.   

    我是说对于比如A里面的不同模块A1,A2的命令分别为a1,a2他怎么弄才可以正确的传给A1,或者A2呢
      

  6.   

    1. 该为多线程,服务器一个端口可以连接多个客户端的TCP连接,每个TCP连接一个线程,利用每个线程内部的iostream来分别接受
    2. 或者,利用一个接受队列,或表,没隔一段时间将带有TCP头(0x00,0x01)的包解构,由公共模块转入每个模块A1,A2分别处理
      

  7.   

    不知道这样可不可以。
    你现在有三个大模块,你每个模块都分别和服务器建立一个Socket链接。
    就相当于有了3个客户端和一个服务器。
    这样的话,A发的消息A收,B发的消息B收,可以互不影响。
      

  8.   

    给楼主提个建议。
    收发的端口需要分开,也就是说客户端Socket的接收端口要和服务器端Socket的发送端口相连
    客户端Socket的发送端口要和服务器端Socket的接收端口相连,否则,服务器在多个客户连接的情况下,很有可能产生数据冲突。
    下面的几句代码也许可以给你一些帮助:
    服务器端:
    ServerSocket inserver = new ServerSocket(5000);//接收端口
    ServerSocket outserver = new ServerSocket(5001);//发送端口Socket insocket = inserver.accept();//接收客户端的发送请求
    Socket outsocket = outserver.accept();//接收客户端接收请求客户端:
    Socket outsocket = new Socket("192.168.0.1",5000);//连接服务器的接收端口
    Socket insocket = new Socket("192.168.0.1",5001);//连接服务器的发送端口在这里,还有个问题需要注意:
    如果你是用对象来接传信息,除了对象需要序列化,客户端的接收和发送对象NEW的顺序一定要注意,否则会产生死锁。
      

  9.   

    命令分发的话我有个系统是这么做的
    一张HashMap的命令映射表
    0x01 -> "command01"
    0x02 -> "command02"然后接受到TCP消息时,读出命令代码
    然后用反射机制从一个命令控制系统读相对应的处理程序命令控制系统结构
    Interface Base
    --  CommandFunction_01 implements Base
    --  CommandFunction_02 implements Base利用多态自动分发命令
    TcpFunc Base;Base = (Base)Class.forName(取自HashMap的命令字符串).newInstance();