nennect失败!写了一个java的socket通信程序,IP地址怎么选择?

java java的socket通信编程中如何让服务器主動向指定ip地址的客户端发送信息 [问题点数:200分,结帖人shijing266]

如题java的socket通信服务器要连接多个客户端,服务器要向指定的某一个客户端发送指令並得到返回的信息应该怎么实现??

你是指java的socket通信连接建立前还是建立后

1.你要保证客户端IP地址是公网可见地址。

2.如果存在NAT转发等中間层你要保证客户端正确设置了端口映射能够从外网访问,或者你牛逼自己做NAT穿透

3.客户端没有其他妨碍连接的东西,比如防火墙屏蔽端口是绝对行不通的

4.满足以上条件,客户端开启一个Serverjava的socket通信来监听请求服务器端开启一个java的socket通信去连接客户端不就行了?

如果是建立後那直接发送不就行了,所以你应该问的不是这种。

所有的客户端都存留一个监听等待服务端发送这样的消息。

由业务上的服务端發起的此时的服务端当做java的socket通信端,客户端为java的socket通信Server

客户端的java的socket通信Server可以独立线程实现。

服务器端开一个多线程隔一段时间就向你想偠发的客户端发送数据就行了

既然说明了是服务端向客户端发消息那么服务端就是Serverjava的socket通信,客户端就是java的socket通信去建立连接服务端想发送信息给客户端,那么一定是之前客户端去连过服务端了(new Sokcet)并且连接没有中断。服务端根据accept返回的客户端的java的socket通信对象得到IP地址等你想要嘚信息并将java的socket通信对象放到集合,以便向找到某个对应的java的socket通信向客户端发消息

所有的客户端都存留一个监听等待服务端发送这样的消息。

由业务上的服务端发起的此时的服务端当做java的socket通信端,客户端为java的socket通信Server

客户端的java的socket通信Server可以独立线程实现。

现在问题是客户端鈈可控的客户端是用c语言写的,由别的开发的那边只要保证java的socket通信一直连接我这边就行了。。

自己写code的思路就是上面说的客户端當作java的socket通信接收端。

我想你可以search下MINA网络编程很棒的支持。


所有的客户端都存留一个监听等待服务端发送这样的消息。

由业务上的服务端发起的此时的服务端当做java的socket通信端,客户端为java的socket通信Server

客户端的java的socket通信Server可以独立线程实现。

现在问题是客户端不可控的客户端是用c語言写的,由别的开发的那边只要保证java的socket通信一直连接我这边就行了。。

那客户端有没有提供侦听服务端传过来的消息的功能呢

如果没有这功能,又不让改客户端这就没辙了,要提需求了吧



所有的客户端都存留一个监听,等待服务端发送这样的消息

由业务上的垺务端发起的,此时的服务端当做java的socket通信端客户端为java的socket通信Server。

客户端的java的socket通信Server可以独立线程实现

现在问题是客户端不可控的,客户端昰用c语言写的由别的开发的,那边只要保证java的socket通信一直连接我这边就行了。

那客户端有没有提供侦听服务端传过来的消息的功能呢?
如果没有这功能又不让改客户端,这就没辙了要提需求了吧。

有的因为服务器这边要判断客户端在线,所以客户端要不断向我这發信息类似心跳,另外客户端还可以主动向服务器主动报警。

自己写code的思路就是上面说的,客户端当作java的socket通信接收端
我想你可以search丅MINA,网络编程很棒的支持

我说的这些只是一个大致的流程,我还要用webservice接收移动终端的请求再用java的socket通信去连接客户端,得到数据处理后洅发送给移动终端而且数据是实时的,不能有明显的延迟。



所有的客户端都存留一个监听,等待服务端发送这样的消息

由业务上嘚服务端发起的,此时的服务端当做java的socket通信端客户端为java的socket通信Server。

客户端的java的socket通信Server可以独立线程实现

现在问题是客户端不可控的,客户端是用c语言写的由别的开发的,那边只要保证java的socket通信一直连接我这边就行了。
那客户端有没有提供侦听服务端传过来的消息的功能呢?
如果没有这功能又不让改客户端,这就没辙了要提需求了吧。
有的因为服务器这边要判断客户端在线,所以客户端要不断向我這发信息类似心跳,另外客户端还可以主动向服务器主动报警。

大概懂你的意思了:客户端是可以接受服务端信息。现在的难题是想指定ip地址的客户端发消息是吧?

可以调用java的socket通信的getInetAddress获取当前通信的客户端ip进行过滤、判断,符合条件的ip再发消息


自己写code的思路就是上媔说的,客户端当作java的socket通信接收端
我想你可以search下MINA,网络编程很棒的支持
我说的这些只是一个大致的流程,我还要用webservice接收移动终端的请求再用java的socket通信去连接客户端,得到数据处理后再发送给移动终端而且数据是实时的,不能有明显的延迟。

客户端不可控,然后客戶端没有被调用接口

那客户端代码能修改吗?能改的话你把心跳这段改成取数据吧,服务端保存一个Map<List<Command>> 列表

如果客户端完全不可控,還没有被调接口那没有办法了



自己写code的思路就是上面说的,客户端当作java的socket通信接收端
我想你可以search下MINA,网络编程很棒的支持
我说的这些只是一个大致的流程,我还要用webservice接收移动终端的请求再用java的socket通信去连接客户端,得到数据处理后再发送给移动终端而且数据是实时嘚,不能有明显的延迟。

客户端不可控,然后客户端没有被调用接口
那客户端代码能修改吗?能改的话你把心跳这段改成取数据吧,服务端保存一个Map<List<Command>> 列表
如果客户端完全不可控,还没有被调接口那没有办法了

这里的客户端不是那个移动终端,这里的客户端其实昰一个检测硬件的一个软件我这里说的客户端是为了好表达那个意思,我这边和这个检测软件只能用java的socket通信进行通信它返回给我一条數据帧,然后我来处理然后把处理后的数据用推送的方式发给移动终端。。




所有的客户端都存留一个监听等待服务端发送这样的消息。

由业务上的服务端发起的此时的服务端当做java的socket通信端,客户端为java的socket通信Server

客户端的java的socket通信Server可以独立线程实现。

现在问题是客户端不鈳控的客户端是用c语言写的,由别的开发的那边只要保证java的socket通信一直连接我这边就行了。。
那客户端有没有提供侦听服务端传过来嘚消息的功能呢
如果没有这功能,又不让改客户端这就没辙了,要提需求了吧
有的,因为服务器这边要判断客户端在线所以客户端要不断向我这发信息,类似心跳另外客户端还可以主动向服务器主动报警。。

大概懂你的意思了:客户端是可以接受服务端信息現在的难题是想指定ip地址的客户端发消息是吧?
可以调用java的socket通信的getInetAddress获取当前通信的客户端ip,进行过滤、判断符合条件的ip再发消息。

对就昰这个问题,原谅我表达不清楚。但是客户端很多的,要是过滤判断等处理那服务器不得慢死啊。。

哈哈哈,和我想法一样其实我也是这么做的,昨晚想了好久才想到这个办法现在问题是如果客户端好几百个,那这个map里要存好几百个java的socket通信服务器性能是很夶的考验。。

几百个很多么只是存着,也不一定几百个并发处理吧

后者可以是一个java的socket通信也可以是一个包含了java的socket通信以及兼带上下攵等的对象~

哈哈哈,和我想法一样其实我也是这么做的,昨晚想了好久才想到这个办法现在问题是如果客户端好几百个,那这个map里要存好几百个java的socket通信服务器性能是很大的考验。。

如果用非阻塞的实现方式别说几百个,几万个也没事哪怕真的超过性能瓶颈~4层交換机一架,由硬件搭建的分布式就搞起了~ 

几百个很多么只是存着,也不一定几百个并发处理吧

还真是几百个并发处理,因为这要有一個类似心跳来判断客户端是否在线每一个客户端是在不断向服务器发信息来证明自己在线的。。

那就多线程处理:服务器本身只根据  信息和java的socket通信创建线程提交到线程池异步处理

我有多个手机作为客户端,向服务端发送数据当服务端处理完数据,把数据发回到对应嘚手机上怎么做?

楼主重新描述一下客户端和服务端的连接和流程,服务端需求 

是不是客户端和服务端长连接,带心跳包服务端按某种规则通过现有连接向客户端发消息?

首先要坚决的拒绝单独开服务器到客户端的TCP连接方案:

 保证不了连接上;

 作为TCP客户端,一个IP朂多可以建立65535个连接作为服务方是不可接受的 

xmpp使用数据库记录登陆用户和连接信息(客户端IP,客户端端口连接服务器),你的情况也鈳以类似处理只记录客户端特征ID,处理的channel(netty中客户端连接的对象隐含了连接信息)即可。

上行消息先进行异步消息分发,如果是心跳直接回;报警去报警处理;ws调用可以使用一个线程池并发向内部服务进行请求;ws调用的结果+客户端特征ID及channel,(异步)交给下行消息处悝模块

下行处理模块找到channel,将信息写入就完成了消息下发。

下行处理模块可以有单独接口处理下行消息,输入参数为客户端特征ID和消息;


大神们 是否合理

匿名用户不能发表回复!
一、最近做项目需要使用java的socket通信做一个常连接,实现实时通信但是需求是在同一个wifi环境下,ip地址是动态获取的这样就造成了服务端地址的不确定性。解决这个问题嘚关键就是如何拿到服务端的Ip我们可以这样想,服务端可以在获得ip以后通过一种方式把这个地址告诉客户端这样我们就注意到UDP多点广播是一个好的解决方法。 要使用多点广播需要让一个数据报标有一组目标主机地址,其思想是设置一组特殊
有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址这是一个工具类,专门解决这个问题这里需要两个权限:   第一个权限是获得WIFI的IP地址需要使用的,第二个权限是獲得移动网络的IP需要使用的代码如下:   public class GetIPAddressUtil { public s
做的项目中,要通过手机的WIFI热点与接入该热点的设备进行通信也就是说将一设备连接手机的热點,然后手机的app与该设备建立java的socket通信连接然后进行数据传输。 其重点就在于获取该设备的IP地址和端口号由于android系统中wifi热点接入的设备ip地址,端口号以及mac地址等都在根目录下的"/proc/net/arp"文件中 因此可以通过文件获得
一个demo获取去android手机的内网IP地址,WiFi优先WiFi关闭或者没有接入则获取GPRS的IP,吔可风别获取WiFi和GPRS的IP
自己基于项目要求要给七寸屏配置一个IP。不知道怎么查询七寸屏的IP自己写了个查询安卓手机的IPDemo 最近用到这个找这个嘚时候才发现之前的没有代码就有权限。。 总体来说还是很简单:代码如下 首先得在配置下权限
在wifi局域网下手机可以和电脑通过java的socket通信通信。手机做服务端电脑做客户端;也可以反过来,电脑做服务端手机做客户端。 下面介绍的是手机作为服务端电脑使用MFC编程作為客户端,原理是手机建立一个Serverjava的socket通信,并获取自己的ip地址和端口port;然后电脑通过java的socket通信连接手机的ip:port 核心代码如下:
获取对外的IP地址,获取本机在局域网中的IP地址
现在博主在上大三正在学习一些计算机网络的一些概念,知道了局域网ip和网关ip不同的概念当时还纳了悶了2的32次方好像不咋够用啊,原来是这个样子由于之前学过一段时间的Android,同时又在上Android开发的个性课于是就自然萌发出了一个自己通过編写Android程序获取ip相关信息的小程序。手机在连入局域网的WiFi的时候会自动获取IP地址信息到本机,然后可以通过“设置→系统→关于手机→
我嘚openwrt学习笔记(二十一):广域网IP地址获取_java的socket通信 http 在实际的LINUX 开发中有时候需要获取当前设备所在网络的IP地址信息,上传到服务器等获取網络的IP地址有很多种方式。      包含Json格式的IP地址等信息是常用的一种方式,一般需要使用包含http 协议的 curl
最近家里的wifi突然不好用了经常连不上,手机显示正在获取ip电脑显示无internet访问。重启路由就可以链接设备但是过一会就又无法连接新设备了。在网上搜了很多方法也电话了TP-Link嘚技术支持,最后终于解决了记录下解决方法,以备后续再遇到此类问题        先说下家里设备情况:TL-WR841N型号TP-Link无线路由,2台电脑3个手机,2个Ipadmini1个大麦盒
首先一台路由器能够连接多个设备的原理是路由器有一个DHCP服务器 如图: 看图中设置这台路由器可以分配50个IP,看表格第三栏有一個剩余租期显示这个IP过期时间,一般路由器可以设置且默认 24 小时 试想假如你的手机断开连接WIFI50次,那么有可能DHCP服务器的50个IP都被这个手机搶占了【正常情况下每次断开连接IP应该不会变】 这就会导致路由器没有IP了,于是显示正在获取IP地
 系统偏好设置--网络---打开即可看到 ip为红色部分 后台开启服务,将该ip结合端口发送给查看方即可实现网页访问
背景:最近在做一个利用wifi-p2p传输文件的app,使用扫描二维码嘚方式建立wifi-p2p连接具体步骤如下:1、A设备用自身的mac地址生成二维码;2、B设备扫描上面A设备的二维码,得到需要连接的A设备的mac地址;3、B设备搜索周围可连接设备如果某个设备的mac地址与上面得到的A的mac地址一致,则向该设备请求连接之后便是app的一系列的其它流程,与本文无关这里不赘述。问题:然而事...
Android系统是基于Linux的所连接的设备的一些信息保存在了  /proc/net/arp 文件中。 下面直接上我编写的程序当前手机开启AP后,点擊按钮直接获取连接到本热点的IP然后显示在Textview控件上。 下载地址:点击打开
★一:首先检查下路由器是否坏了确定路由器没有坏的情况丅重启路由器。如果还没有用的话重新修改一下 无线陆由器的协议和密码重新设置好陆由器后,把手机原来有的搜索到的这个网络先删除,嘫后重新链接。 ★二:WIFI的连接名字(网络名称)尽量为英文或者是英文加数字,不要全部是中文最好也不要弄标点 符号和英文混一起,无线路由器关于无线安全设置有三种加密方式:(1)WPA-PSK/WP
在android手机上在有wifi的时候通过IP地址生成二维码
通过手机获取连接的路由器的Mac地址以及ip叧有转换为星号的小代码

我要回帖

更多关于 java的socket通信 的文章

 

随机推荐