(用C语言实现)客户端如何通过socket调用服务器函数

要求:现在用C语言socket创建了一个客户端和一个服务器端。当客户端发出请求调用服务器上的函数,服务器接受请求后调用客户端请求的函数进行处理,将处理后的结果返回给客户端。
我是新手,发现客户端只能给服务器发送字符串,不知道如何让客户端调用服务器上的函数(方法),希望高手指点。最好给个例子,用C语言写。(因为java和C区别有点大)

socket是用来和服务器通信的,无法直接调用服务器函数。

要实现功能,可以和服务器约定协议。
比如,在与服务器通信连接后,发送一系列标识符,最后加一个函数id,表示要求服务器调用约定的某一个函数。
服务器在接收到后,执行对应的函数,将结果返回给客户端即可。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-02
其实你会发送字符串就行了。你可以特定一个字符串,例如:你自己规定客户端向服务器发送字符串“F”,服务器接收到数据,判断一下,如果是“F”,那么就调用你想调用的那个函数,再将返回值发送给客户端就好了。追问

嗯,我起初也是想的这个方法,但是由于这种方法把字符串写固定了,推广性不强,适合作为备选方案。首选还是找一种可以治本的方案,当然,还是谢谢你。

第2个回答  2012-09-02
可以自己设计一个应用层协议,通过客户端发送命令及所要的参数,服务端执行相关的服务!简单的协议格式可以用如TLV格式。追问

感谢你的回答,可是我还是不大懂。我看java是通过反射机制实现的啊,C有类似的处理方法么?

追答

没有,C是处于高级和低级之间的语言,它没有那么多机制。所有的东西你都得自己设计。我给你举个例子吧
你定义了个TLV字符串: | cmd | data_size | data | (每个段一字节)
此时你要在客户端设计一个发送请求的函数:int request(int socket, char *req_str,size_t req_size);它用来封装并发送请求。
而服务器端收到你的请求后,对TLV进行解析。然后从你的TLV信息中去判断应该调用的函数,并把data中的参数解析后传递给调用的函数。

追问

你好,非常感谢你能继续回复。由于我是新手,在网上查了下TLV的信息,对你说的方法还是了解不够明白,能否给个详细点的例子,不胜感激。

本回答被网友采纳
第3个回答  2012-09-03
是不是要用到类似于execl的函数, 客户端通过管道告诉服务器要执行的文件和执行文件所需的参数, 然后服务器执行程序, 将结果告诉客户端.如果是的话, 而execl函数可以用.网上API很多,那个宋敬彬的《网络编程》里的第18个例子有相关的操作, 网上有源代码. 不知道是不是你想要的.
第4个回答  2012-09-12
同学,你说的其实是被称为Web Service的东西。
不用自己定义协议了,可以参考SOAP协议,也有实现gsoap,可以直接拿来用。

Any questions ?
相似回答