最近在做一个系统,是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同样确保发和接收不是传给别的
在客户端我需要进行数据库的查询和更新 我想问下如何把这个语句传给服务器,应该我有不止一个的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同样确保发和接收不是传给别的
发的时候这样发
out.write(0x01);
out.write("abcde");服务器端接收以后先解析第一位命令
根据不同的命令执行不同的动作这就是个简单的TCP协议了
比如从客户端发送给服务器的消息中
a发送的消息命令是0x00
b发送的消息命令是0x01
服务器根据命令来分发不同的请求同样的服务器给客户端传送时,加上不同的命令不就行了
2. 或者,利用一个接受队列,或表,没隔一段时间将带有TCP头(0x00,0x01)的包解构,由公共模块转入每个模块A1,A2分别处理
你现在有三个大模块,你每个模块都分别和服务器建立一个Socket链接。
就相当于有了3个客户端和一个服务器。
这样的话,A发的消息A收,B发的消息B收,可以互不影响。
收发的端口需要分开,也就是说客户端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的顺序一定要注意,否则会产生死锁。
一张HashMap的命令映射表
0x01 -> "command01"
0x02 -> "command02"然后接受到TCP消息时,读出命令代码
然后用反射机制从一个命令控制系统读相对应的处理程序命令控制系统结构
Interface Base
-- CommandFunction_01 implements Base
-- CommandFunction_02 implements Base利用多态自动分发命令
TcpFunc Base;Base = (Base)Class.forName(取自HashMap的命令字符串).newInstance();