java socket技术 客户端实现不发送请求给服务端但是一直接收服务端发来的数据

服务端使用的是C语言做的,与客户端连通后服务端一直主动推送数据给客户端,客户端使用Java技术实现一直接收数据,该怎么去做?

说点泼冷水的话题
首先确认什么是客户端,什么是服务端。
从用户的角度,可见的、可操作的即是客户端,也就是你这里说的java开发的部分。而不可见的部分就是服务端,也就是你说的C部分。
而从网络开发的角度,发起请求的是客户端,而接收请求的是服务端。这与用户感受有很大区别。
当从java请求C的时候,java是客户端,C 是服务端。而当C主动请求时,则C就变成了客户端,而java 变成了服务端。
所以,从网络开发的角度,java想成为此次通信的服务端,必须长期维护一个端口可用,而C 要访问这个端口。
而java为了能够长期维护一个端口,一般采用socket 方式(其他方式也基本上都是基于socket的),由于java已经封装的很好了,只要new Socket(IP,port) 就可以 获得,同时,由于原来C 是服务器,而如果没有多个服务器同时向java端发送请求的话,基本连线程处理都不需要做的。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-15

    java 可以用apache mina实现Socket客户端。C语言的Socket server网上应该也有很多源码。

    看你的描述,应该类似保持长连接推送计算。

简单描述是:

a 客户端请求服务器端,请求订阅某个推送主题,

b 服务器端给此连接编号,并将该连接保持(使用定期发送心跳报文的方式),将编号与连接保存在内存中。

c 当服务器需要推送消息给客户端时,轮询保持的连接列表,逐一发送消息给客户端。

以下是相关介绍链接:

http://blog.csdn.net/ouyhong123/article/details/39395651


一般做推送服务,对服务器的内存要求比较高,现在流行使用Erlang或Go语言写服务器端。

本回答被网友采纳
第2个回答  推荐于2018-03-20
监听你系统通信所用的端口,有数据就获取显示就可以了。例如你的服务器ip是168.12.1.16,使用的是2000端口号,Socket socket=new Socket("168.12.1.16",2000);
DataOutputStream in=new DataOutputStream(socket.getInputStream());追问

是采用定时去读取信息吗?不发送请求给服务端 服务端会主动把数据推送过来吗?

追答

当然也算是定时读取的一种特殊形式,但是并不需要你自己去实现。他会监听指定的通信端口,当服务器端有数据发送过来是,就能触发相应的事件,自己就可以获取到信息。

本回答被提问者采纳
第3个回答  2015-04-07
java 你不要关闭socket就好了。
相似回答