2 hekewangzi hekewangzi 于 2016.03.15 21:40 提问

使用socket通信服务端如何处理客户端请求

场景如下:
一个服务端,一个客户端通过socket连接服务端,假如客户端要请求服务端做一件事(如调用服务端A类的a方法),
因为socket传输的是字符串,所以我现在的做法是让客户端传一个标识符a到服务端,然后服务端
通过判断传过来的是a则调用A类的a方法,
如果我要执行A类的b方法,则传b过去再判断

我想问的是有没有更好的解决方案,或现成的框架可用

5个回答

u014481698
u014481698   2016.03.15 21:49
已采纳

如果你这样的需求,我觉得更适合HTTP。也许玩C++的更习惯于socket。之前做过一个IM的DEMO,一直用的socket,这样服务端需要一个管理器,去处理和分发处理。其实这样和HTTP没什么区别了,还更麻烦了,我正想要把推送和即时消息之外的转到HTTP请求。

u014481698
u014481698 回复hekewangzi: 并存使用。即时行为的走长连接,请求行为的走HTTP
接近 2 年之前 回复
hekewangzi
hekewangzi 用HTTP是可以,但我是想让客户端与服务端保持长连接,因为服务端还要能与客户端通信
接近 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.03.15 21:49

这个就是i一个命令解析处理的过程 自己定义规则处理i就可以了

hekewangzi
hekewangzi 因为通过socket传到服务端的都是字符串,所以不知道如何通过字符串转变成调用某个方法
接近 2 年之前 回复
xionglangs
xionglangs   Rxr 2016.03.15 22:27

客户端发送的信息在服务端接收都是字符串,所以要调用不同的方法,就必须跟据客户端输入的字符串来判断怎么执行代码,规则可以自己定义。
在类中定义一个静态字符串private static String str="返回值";
str=new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine();
if("a方法的名称".equals(str)){
执行a方法
}else if("b方法的名称".equals(str)){
执行b方法;
}......客户端输入的要是调用的方法名称就可以了。
这种方法逻辑上是可以得,你自己在具体用途具体分析吧。

hekewangzi
hekewangzi 这种方法是可以实现,但不现实,用Java的话倒可以用反射实现。一直做B/S开发,不熟悉C/S模式
接近 2 年之前 回复
skaitiaozhan
skaitiaozhan   2016.03.16 00:18

客户端解析用户命令,转换成你的服务端能够理解的字串,传给服务端按照相同的规则解析出来就好了吧。我也在尝试做C/S的东西,个人理解

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.16 10:31

这个跟软件是C/S还是B/S没有关系的啊,就是Socket的应用,约定好通信规则即你传什么字符,我调用什么方法就可以了。
而且B/S本质也是Socket 的。这就是一个简单的java socket编程的应用,服务器端解析客户端的请求数据,利用java反射调用相应的方法,并将处理结果返回给客户端。一般的Socket入门的demo都能来改改就用的,就是修改Server收到数据的后的处理代码就可以了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!