当前位置:编程学习 > JAVA >>

java socket通信 如何在同一台主机上 ,一个服务器,两个客户端, 两个客端直接通讯?

想法是这样的a、在用户登录时,通知服务器在线,服务器进行用户地址标识,并按一定的时间进行在线验证,登录同时从服务器获取好友(通讯对象)的地址和端口。b、用户间通讯时,主动方直接根据从服务器获取被动方地址和端口数据,然后将消息直接发送到接收方,并需要回消息验证正确到达。
现在的问题是1如何做到一定时间 在线验证?
2.如何根据ip及端口  让两个客户端之间直接进行沟通?(最好是有代码
(不用服务器转发客户端之间的消息) java  socket 多个客户端通信 服务器 --------------------编程问答-------------------- --------------------编程问答-------------------- 这个有难度啊,想想得··。 --------------------编程问答-------------------- --------------------编程问答-------------------- 客户端也要监听一个端口并把这个端口告诉服务端,后面怎么做LZ应该知道了吧 --------------------编程问答-------------------- 问题2可以向服务器去问 那个客户端ip什么的,另外对方客户端得开监听。
问题1...这个没明白。。。 --------------------编程问答-------------------- 1:在线验证 服务器发一个信息下来客户端 client收到就马上发相应的应答指令给server server如果在发出后一定时间内(一般是几秒钟)没有收到回复 就证明client已断线 这里更适合UDP协议 因为如果TCP/IP协议的话 server直接监控read方法是否有connect reset就行啦!具体实现过程看API
2:客户端之间通讯 在通讯建立之前一定要通过服务器作为中介 如A要和B通信 A先告诉server要与B通信 并通过server将A的IP port告诉B 让B在A建立serversocket前建立clientsocket 之后就是可以摆脱server两个服务器进行通讯啦!
其实另一种方法就是没有不用单独建立服务器只要一个app能建立serversocket和clientsocket 这种方法较难 LZ可以想一下  --------------------编程问答-------------------- 打错了 最后应该是另个客户端摆脱服务器进行通信
--------------------编程问答-------------------- 两个客户端想要单独通信,就要服务端辅助进行网络打孔。TCP/UDP都能实现打孔。不过,设计起来太复杂了。

在线验证比较好实现,就是写个Timer定时向服务端发送一个数据包就可以了。 --------------------编程问答-------------------- 这个我也想知道,关注下 --------------------编程问答-------------------- 打洞想当麻烦 --------------------编程问答--------------------
引用 4 楼 x19881216 的回复:
客户端也要监听一个端口并把这个端口告诉服务端,后面怎么做LZ应该知道了吧
 不太明白。。能不能说仔细一点啊?比如就是客户端A与客户端B进行通信  二者需要怎么样才能通信啊 不会具体应用呢 没试过,想尝试写写可是又不是很清楚,虚心请教
我将经由服务器转发的做完了  是因为每当有一个客户端连接时我都将socket连接与对应的唯一标识的key 记录在了服务器端 这样服务器端可以做到转发   但那客户端A方面有没有这个记录 他又怎么做到发送给B呢 --------------------编程问答--------------------
引用 8 楼 preferme 的回复:
两个客户端想要单独通信,就要服务端辅助进行网络打孔。TCP/UDP都能实现打孔。不过,设计起来太复杂了。

在线验证比较好实现,就是写个Timer定时向服务端发送一个数据包就可以了。
那个计时的求代码 。网上写得比较杂,求权威!!
还有啊那个网络打孔是什么东东啊?求推荐个相关的介绍看看 --------------------编程问答-------------------- 那就需要你的手机程序 既要有server服务监听 又要有正常的socket客户连接 连接时设置对方的服务地址就好 --------------------编程问答--------------------
引用 13 楼 haoyizsw 的回复:
那就需要你的手机程序 既要有server服务监听 又要有正常的socket客户连接 连接时设置对方的服务地址就好
sorry 不是手机程序 是你的客户端程序 --------------------编程问答--------------------
引用 13 楼 haoyizsw 的回复:
那就需要你的手机程序 既要有server服务监听 又要有正常的socket客户连接 连接时设置对方的服务地址就好
给一个具体的代码吧 大神 道理似乎明白了些可是不会写代码??求指教 --------------------编程问答--------------------
求代码 --------------------编程问答--------------------
引用 16 楼 a1216164960 的回复:
求代码

================================
apache mina 开源的通信框架。 --------------------编程问答-------------------- 能不能使用udp呢
--------------------编程问答--------------------
引用 18 楼 yousun4688 的回复:
能不能使用udp呢
使用UDP  该怎么做呢  --------------------编程问答-------------------- 这个不难吧,上个星期团队考核,做了个联机的小游戏,我也找了相关的资料,你这两个问题我在找资料的途中也找到有,要的话,可以发给你看看 --------------------编程问答-------------------- 客户端连上服务器后,设置一个端口进行监听其它客服端的连接。同时将这个端口号告诉服务器,服务器好告诉其它客户端啊 --------------------编程问答--------------------
引用 20 楼 fighterandknight 的回复:
这个不难吧,上个星期团队考核,做了个联机的小游戏,我也找了相关的资料,你这两个问题我在找资料的途中也找到有,要的话,可以发给你看看
嗯 好的 我QQ1216164960 可以发到邮箱 谢谢了希望可以对思路做一下简单的说明 新手求指教 --------------------编程问答--------------------
引用 21 楼 fei1710 的回复:
客户端连上服务器后,设置一个端口进行监听其它客服端的连接。同时将这个端口号告诉服务器,服务器好告诉其它客户端啊
似乎明白了些 我先试试。 --------------------编程问答--------------------
引用 6 楼 sdewenking 的回复:
1:在线验证 服务器发一个信息下来客户端 client收到就马上发相应的应答指令给server server如果在发出后一定时间内(一般是几秒钟)没有收到回复 就证明client已断线 这里更适合UDP协议 因为如果TCP/IP协议的话 server直接监控read方法是否有connect reset就行啦!具体实现过程看API
2:客户端之间通讯 在通讯建立之前一定要……
 是用线程吧?

--------------------编程问答--------------------
引用 4 楼 x19881216 的回复:
客户端也要监听一个端口并把这个端口告诉服务端,后面怎么做LZ应该知道了吧
你说如果那样的话
比如说客户端A登陆了 这时候服务器要将A的所有在线好友的监听端口 都一次性得告诉客户端A; 还是当A请求与某人聊天时 服务器再将A需要的客户B端口发送给A啊  。我个人还是觉得后面一种比较好那样的话是不是就可以给陌生人也发送信息了吧,就不用限定只能是好友了??? --------------------编程问答--------------------
引用 6 楼 sdewenking 的回复:
1:在线验证 服务器发一个信息下来客户端 client收到就马上发相应的应答指令给server server如果在发出后一定时间内(一般是几秒钟)没有收到回复 就证明client已断线 这里更适合UDP协议 因为如果TCP/IP协议的话 server直接监控read方法是否有connect reset就行啦!具体实现过程看API
2:客户端之间通讯 在通讯建立之前一定要……
A要和B进行通信 是不是A告诉服务器它要和B通信  然后服务器将B的ip和端口号告诉A  然后A再给B发送消息 打通连接啊?然后B再给A回复两个人再进行通信交流。看你写的 似乎和我的想法是反的??A要给B发信息 不是A请求连接B吗? --------------------编程问答--------------------
引用 6 楼 sdewenking 的回复:
1:在线验证 服务器发一个信息下来客户端 client收到就马上发相应的应答指令给server server如果在发出后一定时间内(一般是几秒钟)没有收到回复 就证明client已断线 这里更适合UDP协议 因为如果TCP/IP协议的话 server直接监控read方法是否有connect reset就行啦!具体实现过程看API
2:客户端之间通讯 在通讯建立之前一定要……
对了还有个问题忘记问了  对于在线验证 那个如果我有好多用户在线  那我是在同一时刻给所有的用户都发一个消息 看看是否能够及时回复?还是针对不同的用户在不同时刻发送验证信息?? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 我也正在做类似的一个项目。所有用户上线后(程序启动调试),均到服务器端报道。服务器进行端口监听,将端口放在一个Map或者List集合中。将A的消息转发给B,服务器端在集合中搜索出B的端口,分发就OK了。服务器只起到转发消息的作用。 --------------------编程问答-------------------- 如果两个客户端相互通信的话,就把其中一个看成服务端。一个监听。一个连接。只需要知道监听那段的IP和端口号就可以了。 --------------------编程问答-------------------- --------------------编程问答-------------------- 打酱油的飘过,话说,楼主真的换个头像。。。这个头像让人有种想吐的冲动。。。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,