java 服务器 在不同局域网内怎么解决

Java如何实现不同局域网TCP通信+群聊(云服务器实现)

他这用的就是socket bind那几步,纯纯的BIO

(253条消息) Java如何实现不同局域网TCP通信+群聊(云服务器实现)_java不同局域网_尼古拉斯.鸣的博客-CSDN博客

3.解决方案
通过分析,我们的解决方法有多种

1.两台电脑在同一局域网(这不是我们想要的)
将我女朋友的电脑拿来和我一起连一个无线网,这样她的电脑就可以发现我的电脑的IP,然后就可以正常连接服务器了。

2.修改服务器主机路由器中的映射关系,将内网映射到外网(不是我们想要的)
该方法我没试过,因为我不知道我宿舍的路由器登录密码。。。

以下简单说原理:

上面介绍了NAT,如果你在百度搜IP,你会发现百度的IP地址和ipconfig出来的IP地址并不一样。

百度的IP地址才是你真正的上网用的IP地址也是路由器的公有IP地址。

修改路由器的映射关系,当别人访问路由器的公网IP的端口号时,路由器会自动映射到服务器主机的端口号上,这样也实现了我们的目的,但是要让别人修改用户端Socket的绑定IP为路由器的公有IP后运行代码。

如果每一次连接同一个路由器,路由器可能给我们分配不一样的IP地址,这是我们要去动态映射我们的服务器IP(我没接触过,但是看到过要用‘花生壳’这个软件你们可以自己研究)

如果服务端每次连接不同的路由器,我们甚至要改变客户端Socket绑定的IP,这就更麻烦了!

如果服务器端关闭,那么其他所有客户端的Socket都会断开连接,况且谁的电脑也不会一直开着,这样就会想到云服务器啊,它就会一直开着。

具体的修改映射关系的方法:如何将内网ip映射到外网_xiaonuo911teamo的博客-CSDN博客_将局域网ip映射到公网

3.云服务器
我用的是阿里的服务器,大家也可以用其他的华为啥的。

注册阿里云免费领云服务器_云服务器ECS_阿里云 (aliyun.com)
————————————————
版权声明:本文为CSDN博主「尼古拉斯.鸣」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45909571/article/details/123818361

不在同个局域网下,客户端和服务端怎么交互?(一个没改tomcat默认地址引发的惨案)

(253条消息) 不在同个局域网下,客户端和服务端怎么交互?_泼夫的博客-CSDN博客

Java Socket 内网和外网之间的通信

大家都知道一般我们编写的关于网络的代码是在局域网下测试。最近我尝试了下将自己写的聊天室在网络上(外网上)进行通信测试,好比如qq。首先给大家普及下基本网络知识

首先给大家普及下基本网络知识
内网 : 也就是不和互联网相连的网络。也就是我们常说的局域网。而内网IP又分为3种:第一种10.0.0.0~10.255.255.255,第二种172.16.0.0~172.31.255.255,第三种192.168.0.0~192.168.255.255 其它的IP你就认为是外网IP好了

外网 :也是互联网。我常常通过输入网址,进入网站。

我们的计算机自身就是一个局域网。我们编写的程序一般是在局域网下测试。

实现方案
1、Server方在外网,Client方在内网,那么可以直接通过外网IP连接,不需要任何映射
2、Server方在内网,Client方不论在其他内网还是在外网,都需要Server方的监听端口有被外网访问的权限,可以通过端口映射的方式实现,如果没有自己的外网服务器做端口映射的话,建议你直接使用花生壳软件(摘自如果可以我愿争取的博客)

以聊天室为例。我们编写了服务器和客户机。当服务器已经在外网情况下。我们的客户机直接可以socket连接。

当我们的服务器和客户机都是初始情况,seriver还在内网(局域网)client在内网(或者外网)下我们需要先把服务器置于外网。让外界可以通过ip地址(网址)可以访问状态。比如外界访问了  103.46.129.43(一个网址ip地址)时。这是我们通过端口映射方式让它直接连接到我们的服务器。如图所示


————————————————

版权声明:本文为CSDN博主「杨涛的博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42034205/article/details/88427169 

Socket实现跨外网通信的问题(对于计网知识不够的无情吐槽,学过也没啥卵用,当时没写代码)

Socket实现跨外网通信的问题-CSDN社区

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现在局域网内的语音通话,可以使用Java语言结合网络编程技术来完成。 首先,需要使用Java的音频处理库,如javax.sound包,来处理音频数据。可以使用录音功能将麦克风输入的音频数据获取到,并使用播放功能将音频数据输出到扬声器。 然后,需要使用Java的网络编程技术建立通信连接。可以使用Socket类来实现在局域网内的通信。其中,一个设备充当服务器端,另一个设备充当客户端。 服务器端首先需要创建一个ServerSocket对象,指定一个端口号,用于监听客户端的连接请求。然后使用accept()方法接受客户端的连接,返回一个Socket对象。 客户端需要创建一个Socket对象,指定服务器端的IP地址和端口号,然后使用connect()方法与服务器端建立连接。 一旦连接建立成功,服务器端和客户端就可以进行语音通话了。服务器端从麦克风获取音频数据,然后通过Socket对象将音频数据发送给客户端。客户端接收到音频数据后,使用播放功能将音频数据输出到扬声器,实现声音的播放。 除了语音数据的传输,还需要处理通话过程中的网络延迟和数据包丢失等问题。可以使用缓冲区来减小网络延迟,并使用错误校验和重传机制来解决数据包丢失的问题。 总之,通过使用Java的音频处理库和网络编程技术,可以实现在局域网内的语音通话功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值