Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过wifi连接服务器和客户端插座

通过wifi连接服务器和客户端插座
EN

Stack Overflow用户
提问于 2020-02-15 14:00:16
回答 1查看 165关注 0票数 0

以下是服务器代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   void bind(String ip,int port)
   {
    socket=ServerSocketChannel.open();
    socket.configureBlocking(false);

    socket.register(acceptChannel=Selector.open(),SelectionKey.OP_ACCEPT);//Since Non Blocking Create Selector
    socket.bind(new InetSocketAddress(ip,port));//Binding To Specified IP,Port So clients can connect

    accept=threadService.scheduleAtFixedRate(this,100,interval,TimeUnit.MILLISECONDS);
   }

    void run()//Just Loops And Checks For New Clients
    {
     try
     {
      if(acceptChannel.selectNow()==0){return;}

      Set<SelectionKey> channels=acceptChannel.selectedKeys();
      Iterator<SelectionKey> iterator=channels.iterator();

      while(iterator.hasNext())
      {
       SelectionKey key=iterator.next();
       ServerSocketChannel server=(ServerSocketChannel)key.channel();

       SocketChannel client=server.accept();
       client.configureBlocking(false);

       //Do Stuff With Client        

       iterator.remove();
      }
      channels.clear();
     }
     catch(Exception ex){errors.newClientError(ex,mainSocket,client);}
   }

这是客户端代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    SocketChannel clientSocket;
    void connect(String IP,int port)throws IOException
     {
      clientSocket=SocketChannel.open();
      clientSocket.configureBlocking(false);

      clientSocket.register(connectChannel,SelectionKey.OP_CONNECT);//Non Blocking So Loop to check for status
      clientSocket.connect(new InetSocketAddress(IP,port));//Do Actual Connection Here

      waiting=threadService.scheduleAtFixedRate(this,100,10,TimeUnit.MILLISECONDS);
     }

     public void run()//Loops and checks for successful connection
     {
      try
      {
       if(connectChannel.selectNow()==0){return;}

       Set<SelectionKey> channels=connectChannel.selectedKeys();
       Iterator<SelectionKey> iterator=channels.iterator();

       while(iterator.hasNext())
       {
        SelectionKey client=iterator.next();
        SocketChannel channel=(SocketChannel)client.channel();

        if(channel.finishConnect())
        {
         client.cancel();

         iterator.remove();
         channels.clear();

         //Yeah we are connected job done

         return;
        }

        iterator.remove();
       }
       channels.clear();
      }
      catch(Exception ex)
      {

      }
     }

正如您所看到的,出于特定于项目的目的,我的客户端和服务器都必须处于非阻塞模式。

现在,此代码可以在以下情况下工作:

1)客户端和服务器在同一台计算机上,客户端和服务器的IP参数均为"localhost“

2)客户机和服务器都在同一台计算机上,而且客户机和服务器的IP参数是我的路由器在windows中的网络配置,所以我转到cmd type ipconfig并将IPV4地址传递给这两种方法

问题是,当我的客户在通过wifi/lan连接的不同系统上时,他无法连接到我的服务器。

我将我的服务器绑定到我的路由器的连接地址,并将该地址提供给另一台机器上的客户机的IPV4 ()方法,但他得到"ConnectionTimedOutException“

客户端和服务器的端口参数相同,即8001

对于此测试,两个系统防火墙都处于禁用状态。

知道哪里出问题了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-16 05:38:50

我不得不使用端口转发来解决我的问题

我采取了以下步骤

1)客户机使用我在ipv4 ()方法中从netwhatsmyip.com获得的globalnot本地连接地址

2)在我的服务器中,我使用来自ipconfig的本地ipv4地址调用bind()

3)我使用的公共端口是8001,我必须在路由器设置中为端口转发进行配置,以便它将来自我的全局ip:端口XXX.XXX:8001的所有数据包转发到我的本地ipv4地址:端口192.168.xxx.xxx:8001

这种方法有效,但效率不高,因为当我断开连接并重新连接时,我的IP地址会发生变化。如果有人知道不配置静态IP就能连接到服务器的更好的解决方案,请分享。谢谢你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60239456

复制
相关文章
Linux 下通过命令行连接 WiFi
Kali Linux 默认使用 Gnome 桌面环境,而在 Gnome 的顶部菜单栏中是可以直接选择无线网络并建立连接的,这就像在 Windows 中一样方便快捷。实际上除了 Kali 系统,其他的桌面版的 Linux 发行版(例如 Ubuntu、CentOS、RedHat 等)也都是可以在菜单栏或者系统设置中通过图形界面来配置无线网络连接的。
悠风
2019/08/28
38.7K2
Linux 下通过命令行连接 WiFi
国产芯片WiFi物联网智能插座—项目简介
随着智能电子设备的不断进步和发展,必然会提升智能设备的使用率,诸如智能移动设备、智能家居等设备发展极为迅速。物联网作为一个互联网和通信网络的信息载体,能够使物理对象实现网络互通,近年来,很多智能家居设备都是基于物联网技术来设计和使用的。
不脱发的程序猿
2021/01/20
5130
centos7下如何通过命令连接wifi
用户在web端输入wifi名称和密码,客户端可以通过服务端下发的信息进行连接,centos7下如何通过命令连接wifi
用户7639835
2021/08/28
1.7K0
国产芯片WiFi物联网智能插座—电源功能设计
明确电源功能后,需要对电源模块选型,我的选型总体标准是:质量高、价格低、体积小,要具备电压隔离且EMC过关,功耗不用要求严格。
不脱发的程序猿
2021/01/23
7000
国产芯片WiFi物联网智能插座—电源功能设计
ESP8266 WiFi物联网智能插座—项目简介
物联网虽然能够使家居设备和系统实现自动化、智能化管理,但是依然需要依靠更为先进的终端插座作为根本保障,插座是所有家用电器需要使用的电源设备,插座的有序智能管理,对于实现智能家居设备的统一智能管理具有举足轻重的作用。无论是家庭生活,还是工业制造,插座在生活中的应用无所不在,当之无愧为电网与各用电设备之间的桥梁。 
不脱发的程序猿
2023/09/22
4720
ESP8266 WiFi物联网智能插座—项目简介
ESP8266 WiFi物联网智能插座—电能计量
WiFi物联网智能插座硬件设计的重点就是电能计量,为此单独写一篇博文讲解电量计量的设计方案和实现原理。
不脱发的程序猿
2023/09/23
2.3K0
ESP8266 WiFi物联网智能插座—电能计量
ESP8266 WiFi物联网智能插座—硬件功能
ESP8266 WiFi物联网智能插座的硬件功能主要包括两部分:控制器板和采集器板。
不脱发的程序猿
2023/09/22
9310
ESP8266 WiFi物联网智能插座—硬件功能
怎样解决WiFi速度和连接问题
理论上,你们所需要的是一个崭新的、没有问题的无线路由器在家里或是办公室里。但是实际上,你们的无线连接总是会有干扰问题。
zstt8054929
2020/12/10
9740
代码实现WIFI自动连接与连接指定WIFI源码
最近家里老人总是问我如何连接WIFI,和他们电话讲又讲不清楚,于是我想到了写一个,打开自动连接指定WIFI的软件。练练手。 废话不多说,首先布局,简单! 两个文本框一个按钮 <?xml versi
对话、
2022/02/22
3.6K0
玩爆EDUP智能插座Part1
智能插座实现了远程开启/关闭连入的设备,的确是一款懒人神器!其实现原理就是通过WiFi模块实现对继电器的开启或者关闭。EDUP智能插座通过用户提供的凭证连接家庭无线网络访问互联网。一切都设置完成之后,智能插座打开TCP/IP连接到位于中国的服务器(219.147.29.235:221)。 物理层 首先,我们准备了一些小螺丝刀和一把瑞士军刀,接着我们小心的打开智能插座,拆开图如下: 通过谷歌搜索我们了解到设备的主件:一些被动组件,一个5Mhz的晶体振荡器,一块没有打上印记的芯片(个人猜测为PI
FB客服
2018/02/06
9160
玩爆EDUP智能插座Part1
国产芯片WiFi物联网智能插座—电耗采集功能设计
WiFi物联网智能插座的电耗采集依托于合力为的HLW8110计量芯片实现,选取它的主要原因是精度不错,价格美丽,并且可以通过串口驱动,使用便捷。
不脱发的程序猿
2021/01/23
8410
国产芯片WiFi物联网智能插座—电耗采集功能设计
iOS能否自动扫描周边wifi信息并通过密码连接
通过代码设置wifi名字和前缀(密码可根据wifi是否有密码选不同方法)连接, 测试发现连接所需时间一般在5s以上,并且在wifi远离等信号较弱时,可能会失败(unknown/internal error/无法加入网络)。[IMG_1326]
woopDast1
2021/10/18
1.1K0
iOS能否自动扫描周边wifi信息并通过密码连接
台式机网线连接笔记本通过wifi上网
1、网线两端连接笔记本和台式机。以前需要用交叉网线,但是现在的网线好像不作区分了,都能用。 2、笔记本端WiFi连接网络 3、笔记本wlan网络属性勾选网络共享,如果有多个网络,框里选择以太网。
全栈程序员站长
2022/09/13
1.4K0
ESP8266 WiFi物联网智能插座—上位机和下位机通信协议
本项目自定义了一套上位机和下位机通信协议,协议并不复杂,包含:配置节点、控制节点继电器开关、节点周期上报数据、升级节点和重启节点功能。
不脱发的程序猿
2023/09/24
6040
ESP8266 WiFi物联网智能插座—上位机和下位机通信协议
树莓派命令连接wifi_树莓派如何连接WIFI
大家好,又见面了,我是你们的朋友全栈君。 hello,大家好,我是叶秋! 上一期呢,给大家介绍了如何给树莓派安装系统,有细心的朋友就会发现上一期安装系统的文章漏了一点点知识,不知道机智的你是否有发现呢~~(尴尬😅)下次一定注意。。😂 在第五步 使用putty 连接树莓派的时候,是使用的ssh 连接的,所以呢树莓派一定要开启ssh,树莓派开启ssh也很简单,就是写完系统以后,直接在根目录新建一个文件,改名ssh 然后删掉后缀名 就OK啦,记住一定要删除.txt 后缀!然后就可以用putty连接了。是不是很简单
全栈程序员站长
2022/06/30
1.4K0
树莓派命令连接wifi_树莓派如何连接WIFI
python 连接wifi脚本
//pip install pywifi import pywifi,time from pywifi import const import subprocess
用户5760343
2022/05/14
1.2K0
Android的Wifi连接
最近在做Wifi连接的功能,在网上查找了很多资料,可用的也比较少,最后遇到很多了问题,一路走来也解决了很多问题,特此记录。
None_Ling
2019/10/29
2.6K0
ESP8266 WiFi物联网智能插座—下位机软件实现
开发环境使用Arduino IDE,IDE安装过程可参见:https://handsome-man.blog.csdn.net/article/details/121195905
不脱发的程序猿
2023/10/17
3910
ESP8266 WiFi物联网智能插座—下位机软件实现
树莓派连接WiFi[通俗易懂]
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
全栈程序员站长
2022/07/02
1K0
台式机通过网线连接笔记本的wifi网络
由于在实验室的场地要求,不容易拉网线进行学习,也就开始研究利用网线连接笔记本来使台式机连接上网络。 【台式机:Ubuntu18.04 + 笔记本:Windows10】
全栈程序员站长
2022/09/07
9590
台式机通过网线连接笔记本的wifi网络

相似问题

Android移动到移动通过公共wifi的插座连接?

15

Android程序通过Wifi连接到远程插座,但不通过移动数据连接

22

通过连接的插座

11

通过插座连接颅骨

111

Android WIFI插座名称?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文