飞翔的红猪 发表于 2012-6-10 19:45:06

要从外网访问内网,请使用有虚拟服务器功能的路由器,比如TPLINK的,如果还想用域名访问,那就申请一个花生壳域名服务,免费的~

erjiang 发表于 2012-6-10 20:10:00

在网通的很多地区,花生壳不太好用,我家的光纤宽带算是一个,花生壳对这类用户,是要收费服务的。

不过,ADSL用户貌似会好些,因为得到的IP都是真正的外网IP,但是注意大部分端口事实上都已经被运营商封掉了,不能当服务器用。

darkorigin 发表于 2012-6-11 00:29:52

本帖最后由 darkorigin 于 2012-6-11 00:34 编辑

erjiang 发表于 2012-6-10 19:11 static/image/common/back.gif
很好,webserver有个小问题,就是不能完成远程的控制。

因为NAT映射的原因,我们内网的webserver是很难 ...

路由的端口映射做1个就好了(基本上99%的路由都带这个功能,直接把内网某一IP地址的某些端口映射到自己的某些端口上)
解决动态地址我用的是DDNS(花生壳)
不需要中转,更稳定。

我以前自己搞的服务器就是用这个方法,除了并发连接数量限制(毕竟家用路由处理能力还是有限的)和防火墙不够强大外,什么都还可以了。一般简单的DOS攻击都可以抵抗。

另外友情提示,用网页中转的方法很不错,很灵活,不过数据一定要做一定强度的加密,否则数据被别有居心的人获取了可能会有安全风险。

darkorigin 发表于 2012-6-11 00:35:42

飞翔的红猪 发表于 2012-6-10 19:45 static/image/common/back.gif
要从外网访问内网,请使用有虚拟服务器功能的路由器,比如TPLINK的,如果还想用域名访问,那就申请一个花生 ...

需要 端口映射和DDNS一起用的 基本上目前市面上的路由都带。

darkorigin 发表于 2012-6-11 00:36:43

erjiang 发表于 2012-6-10 20:10 static/image/common/back.gif
在网通的很多地区,花生壳不太好用,我家的光纤宽带算是一个,花生壳对这类用户,是要收费服务的。

不过 ...

80是可用的,8080也是常见的WEB端口,如果是家里的智能电器网络的接口,端口复杂点也没关系的,更安全呢。

darkorigin 发表于 2012-6-11 00:38:23

erjiang 发表于 2012-6-10 20:10 static/image/common/back.gif
在网通的很多地区,花生壳不太好用,我家的光纤宽带算是一个,花生壳对这类用户,是要收费服务的。

不过 ...

期待你的代码,呵呵 这是一种很好的思路(类似于早些年高端远控软件的反向连接功能)

Randy 发表于 2012-6-11 09:18:36

erjiang 发表于 2012-6-10 19:11 static/image/common/back.gif
很好,webserver有个小问题,就是不能完成远程的控制。

因为NAT映射的原因,我们内网的webserver是很难 ...

对这个很感兴趣,如果可以实现的话,我们就可以很方便的连接到网页去了。

飞翔的红猪 发表于 2012-6-11 10:51:02

还是w5100吧,既可以做webserver,又可以push到Cosm上去

Randy 发表于 2012-6-11 11:24:33

飞翔的红猪 发表于 2012-6-11 10:51 static/image/common/back.gif
还是w5100吧,既可以做webserver,又可以push到Cosm上去

其实COSM上我还么有什么概念,到时候要试试,不然不是很清楚,这种感觉非常不爽!呵呵!

飞翔的红猪 发表于 2012-6-11 19:13:13

Randy 发表于 2012-6-11 11:24 static/image/common/back.gif
其实COSM上我还么有什么概念,到时候要试试,不然不是很清楚,这种感觉非常不爽!呵呵!

这是我的,看看哈https://cosm.com/feeds/59928

Randy 发表于 2012-6-12 09:00:55

飞翔的红猪 发表于 2012-6-11 19:13 static/image/common/back.gif
这是我的,看看哈https://cosm.com/feeds/59928

好的,我去看看,了解了解一下!

Randy 发表于 2012-6-12 09:02:07

Randy 发表于 2012-6-12 09:00 static/image/common/back.gif
好的,我去看看,了解了解一下!

能说一下您是怎么做的吗?我好想了解的,我什么模块都有!呵呵!

yyy_zc 发表于 2012-6-21 12:35:39

zhd1021 发表于 2012-3-10 17:47 static/image/common/back.gif
为什么我用ENC28J60模块的时候无法用浏览器访问,但是能在命令窗口下PING出来

估计PING是模块自己处理的。无法用浏览器访问,线未接好,或则arduino 编程不对

Jerry 发表于 2012-8-2 18:11:16

yyy_zc 发表于 2012-6-21 12:35 static/image/common/back.gif
估计PING是模块自己处理的。无法用浏览器访问,线未接好,或则arduino 编程不对

我也试了,用别的库可以正常工作,用这个库能Ping通,但是访问不了

JUST_DO_IT 发表于 2012-8-30 22:11:30

我这个已经做成功,但想传到yeelink上面去,能帮我看看代码吗/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/

#include <Ethernet.h>
#include <Wire.h>
byte mac[] = { 0x00, 0x1D, 0x72, 0x82, 0x35, 0x9D};
byte ip[] = {202,136,60,231};
//====================================================
#define APIKEY         "81c4aadea5c97b824cb5dc0d3f5a0b54" // replace your yeelink api key here
#define DEVICEID       479 // replace your device ID
#define SENSORID      616 // replace your sensor ID

boolean ResponseBegin = false;
unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;               // state of the connection last time through the main loop
const unsigned long postingInterval = 3*1000; // delay between 2 datapoints, 30s
String returnValue = "";

//IPAddress server(202,136,60,231);
//char server[] = "api.yeelink.net";
//==================================================
Server server(80);
Client client = 1;
void setup()
{
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
Wire.begin();
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
      client = server.available();
   
      if (client.available()) {
      char c = client.read();
         if (c == '{')
         ResponseBegin = true;
         else if (c == '}')
         ResponseBegin = false;
       if (ResponseBegin)
         returnValue += c;
      }
   if (returnValue.length() !=0 && (ResponseBegin == false))
   {
    if (returnValue.charAt(returnValue.length() - 1) == '1') {
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
       }
    else if(returnValue.charAt(returnValue.length() - 1) == '0') {
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
       }
    returnValue = "";
      }
      if (!client.connected() && lastConnected) {
      client.stop();
      }
       if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    //get data from server
   //   getData();
   }
       lastConnected = client.connected();
}
// this method makes a HTTP connection to the server and get data back
void getData(void) {
// if there's a successful connection:
if (client.connected()) {
    // send the HTTP GET request:

    client.print("GET /v1.0/device/");
    client.print(DEVICEID);
    client.print("/sensor/");
    client.print(SENSORID);
    client.print("/datapoints");
    client.println(" HTTP/1.1");
    client.println("Host: api.yeelink.net");
    client.print("Accept: *");
    client.print("/");
    client.println("*");
    client.print("U-ApiKey: ");
    client.println(APIKEY);
    client.println("Content-Length: 0");
    client.println("Connection: close");
    client.println();

}
else {
    client.stop();
}
// note the time that the connection was made or attempted:
lastConnectionTime = millis();
} 急!
页: 1 2 3 4 [5] 6 7 8 9 10
查看完整版本: arduino学习笔记26 - ENC28J60以太网模块实验