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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Socket 客户端与服务端通信【心跳机制+断线重连】
直接上代码,让代码说话! //Server.h #pragma once #include <stdio.h> #include <iostream> #include <winsock2.h> #include <map> #pragma comment (lib, "ws2_32.lib") using namespace std; #de...
Java Socket通信 客户端与服务器端的连接 和信息传输
一.建立客户端和服务器端的连接。 方法分2步: 1.在客户端创建Socket对象,用来发送连接请求 2.在服务器端穿件ServerSocket对象,用来接收请求。 //客户端 public class socket1 { Socket socket; public static void main(String[] args) { new socket1().setUpIn
安卓手机socket通信(服务端和客户端)
socket通信
SOCKET 服务器和客户端通信
<br />哪位经过测试的TCP通信服务器端和客户端程序没?<br />需要能接受200个客户端连接<br />接收到数据后服务器端返回给客户端数据后立即关闭当前连接(不占用资源)<br />每个客户端连进服务器只在第一次的时候需要服务端的监听程序。之后服务端就会获得客户端的socket。此后客户端再向服务端发消息完全就是通过这个socket。可以在服务端获得socket后开线程循环接受命令。接受的命令包括心跳包、结束循环命令等等<br />处报错,经检查,Word文档中书签位置已置中,就是在这一句出现问题
使用socket实现简单的客户端和服务端通信(C#语言)
1.主要思路: (1) 服务端开启监听线程,等待客户端的连接。 每个socket连接放到独立线程中处理。 (2) 服务端和客户端使用约定的消息格式通信。对于比较复杂的消息(如向服务端传递一个实例),可以使用json封装传输。 (3) 每个连接的客户端,注册唯一的ClientID,在服务端以此来区分消息的来源。 2.代码构成 实现该样例包含两个cs的客户端程序。 分别为 服务
Socket通信 客户端和服务器端的通信 客户端
客户端代码:public void getSocket(){ //获取到当前网络的ip地址 InetAddress ia; //创建客户端对象并实例化 Socket s ; try { ia = InetAddress.getLocalHost(); s = new Socket(ia.getHostAddress(),8889); //创建输出流对象并实
C++ socket编程 实现服务端与客户端的通讯
服务器端程序: // Server.cpp : Defines the entry point for the console application. // #include "winsock2.h" #pragma comment(lib, "ws2_32.lib") #include using namespace std; int main(int argc, char*
服务器如何处理客户端请求
当客户端向服务器发送请求时,服务器是如何将请求信息传递给Servlet,Servlet又是通过什么将响应送给客户端。带着这些问题,我们来看下面这张图,图1-1:
Windows下C++服务端和客户端Socket通信简单代码
// Server.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "winsock2.h" #pragma comment(lib, "ws2_32.lib") #include using namespace std; int _tmain(int argc,
C++服务器端+Android客户端的网络通信
今天晚上11点半,在学校断网后的十分钟,我终于实现了C++服务器端与Android客户端的通信。本来很简单的一件事,却因为Android Socket线程阻塞的问题弄了我两天。 好了不多说,直接进入主题:   C++ 服务器端: 用C++进行网络编程有很多方式,比如可以使用winSock,winInt,或者使用MFC的封装类CSocket等等。这里我使用的是比较简单的CSo