苍穹绝音
发表于 2016-2-2 13:04
谢谢楼主分享,么么哒
kevinzhang19701
发表于 2016-2-2 15:16
苍穹绝音 发表于 2016-2-2 13:04
谢谢楼主分享,么么哒
:D:handshake:handshake:handshake
965728310
发表于 2016-2-26 21:11
大哥,看不到代码。。。不知道站内消息在哪里
kevinzhang19701
发表于 2016-2-29 09:04
965728310 发表于 2016-2-26 21:11
大哥,看不到代码。。。不知道站内消息在哪里
代码,可以参考下列链接。如有问题,请及时联系我。
http://www.dfrobot.com.cn/community/thread-10590-1-1.html
荒草中的铁皮屋
发表于 2016-8-17 00:55
老师老师,我啊,就差最后一步 了,那个myservlet2是不是有问题啊,我按照您的代码稍微改了一下,然后在浏览器里打开了servlet2,并且网页上正确的显示了最新的A4 A5的值,但是 到 arduino板子那里就不行了,client.avaliable();返回值是零,板子连接上了但是什么也没有收到,板子发出的查询请求在服务器那里有反应的。但是板子什么也没有收到,我很苦恼,我研究您的代码有一个星期了,中间从什么也不知道的小白,一路自学直到能勉强看懂您的代码实在是不容易。就差这一步就能实现您的这个教程了,暑假快开学了,我想赶在开学之前搞定它,请老师帮帮忙吧,如果方便的话,你能不能看看我的代码呢?看看是不是我哪里改坏了?:'(:'(:'(:'(:'(:'(:'(
荒草中的铁皮屋
发表于 2016-8-17 08:28
老师你看,我对您的myservlet2代码做出的改动只是改了一下名字(改成了responseServlet),然后砍掉了两个灯,只剩两个灯,增加了两行声明数据库的代码,其中我最有疑问的是 那行 response.setContenType("text/text");为甚么我只见过 "text/html",我查了方法的文档貌似没找到“text/text”作为参数的呀? protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String a2 = "0";
String a3 = "0";
String n= "0";
response.setContentType("text/text");
try (PrintWriter out1 = response.getWriter())
{
Connection conn = null;
Statement stmt = null;
ResultSet rs1 = null;
int s = 0;
try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("成功加载数据库");
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/mydata?" +
"user=root&password=521314");
stmt = (Statement) conn.createStatement();
System.out.println("==");
System.out.println("查询最后一条记录...");
rs1 = stmt.executeQuery("SELECT * FROM t1 ORDER BY aid DESC LIMIT 1;");
while(rs1.next())
{
n = rs1.getString(2);
if (n.equals("1"))
{
a2 = "1";
}
else
{
a2 = "0";
}
n = rs1.getString(3);
if (n.equals("1"))
{
a3 = "1";
}
else
{
a3 = "0";
}
}
}
catch (SQLException ex)
{
System.out.println("Error in connection: " + ex.toString());
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
/* TODO output your page here. You may use following sample code. */
//out1.println("<!DOCTYPE html>");
// out1.println("<html>");
// out1.println("<head>");
//out1.println("<title>Servlet myservlet2</title>");
// out1.println("<meta charset=\"UTF-8\">");
// out1.println("</head>");
// out1.println("<body>");
out1.println("A2=" + a2 + ",A3=" + a3 );
// out1.println("</body>");
// out1.println("</html>");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
processRequest(request,response);
}
public String getServletInfo() {
return "Short description";
}// </editor-fold>
就这个servlet的运行结果来看,它成功显示了当前数据库里的小灯信息,然而我的板子没有收到啊。。。。
我再把我的板子的代码贴出来,也是做了改动(简化)的
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress dnserver(192, 168, 0,105);
IPAddress ip(192, 168,0,111);
EthernetClient client;
char c;
String result;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
delay(3000);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
Serial.println("Ethernet connecting...");
}
void loop() {
if (client.connect(dnserver, 80))
{
Serial.println("Connected");
client.println("POST http://192.168.0.105:80/remoteControlByYuancong/ResponseServlet HTTP/1.1");
client.println("Host:192.168.0.105");
client.println();
Serial.println(client.available());
while(client.available())
{
c = client.read();
result += c;
}
Serial.println("==");
Serial.println(result.substring(0,8));
if (result.substring(0,3).equals("A2=1"))
{
digitalWrite(2, HIGH);
}
else
{
digitalWrite(2, LOW);
}
if (result.substring(5,8).equals("A3=1"))
{
digitalWrite(3, HIGH);
}
else
{
digitalWrite(3, LOW);
}
Serial.println("end");
client.stop();
result = "";
}
else
{
Serial.println("connection failed");
}
}
串口监视器输出的信息是是连接成功然而输出的client.avaliable();的返回值为0.
板子什么也没收到,跪求老师解答,您的帖子是两年前的,希望您还有印象。。。
荒草中的铁皮屋
发表于 2016-8-17 20:09
嗯 对了我没有买IO板应该不要紧吧,老师如果我发的代码你看不出来有什么问题,想看其他的什么就告诉我,我会贴上来,总之,都努力这么长时间了,这个问题一定要搞定,不然一个暑假就相当于什么也没有做成了:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(
荒草中的铁皮屋
发表于 2016-8-18 09:34
昨天晚上我梦到你回复了:'(:'(:'(:'(:'(
kevinzhang19701
发表于 2016-8-18 13:29
本帖最后由 kevinzhang19701 于 2016-8-18 13:31 编辑
好久没来了,这陈年旧帖还有人看啊。哈哈哈。
我看看到底写了啥?
kevinzhang19701
发表于 2016-8-18 13:55
荒草中的铁皮屋 发表于 2016-8-17 08:28
老师你看,我对您的myservlet2代码做出的改动只是改了一下名字(改成了responseServlet),然后砍掉了两个 ...
response.setContentType("text/text");
这句没有问题。是Servlet返回给请求者的回复字符串。一般情况,我们用浏览器提交请求,Servlet回复html字符串,这样可以在浏览器内看到格式化的内容。但是,Arduino不是浏览器,它只能识别text字符。因此,我这里指定了text类型。