×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

多谢Henryan, Bugfree 轮胎 等诸位的指导。HTTP协议讲的太理论,看得有点晕。还是How To Handle Data from a Post Form 的问题,希望能得到进一步的帮助。

Form还是最简单的form, 用的是post method。 差不多等同于如下html语句

<FORM action="/cgi/sss" method="post">
<P>
<LABEL for="siteID">siteID: </LABEL> <INPUT type="text" id="siteID"><BR>
<LABEL for="frequency">Frequency (Hz): </LABEL> <INPUT type="text" id="frequency"><BR>
<INPUT type="submit" value="Send"> <INPUT type="reset">
</P>
</FORM>

在客户端summit 后,服务器端可以
1)建立TCP connection
2)接受到client的第一个包:“POST /cgi/sss HTTP/1.1 HOST 192.168.1.5User-Agent:Mozi... ,“
3)server 应该给client回答一下, 或者再申请, client 才会发送server 需要的申请。 或者, 还是别的什么? 这里就卡壳了。 因为数组比较多,不可以用get method.

就这样,在server端一直没看到siteID 和 frequency 。

因为我的server没有RTOS,只能通过对话的形式连接client。

再次多些各位技术指导。让我这个二把刀更锋利一些。
叩谢了
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 多谢Henryan, Bugfree 轮胎 等诸位的指导。HTTP协议讲的太理论,看得有点晕。还是How To Handle Data from a Post Form 的问题,希望能得到进一步的帮助。
    Form还是最简单的form, 用的是post method。 差不多等同于如下html语句

    <FORM action="/cgi/sss" method="post">
    <P>
    <LABEL for="siteID">siteID: </LABEL> <INPUT type="text" id="siteID"><BR>
    <LABEL for="frequency">Frequency (Hz): </LABEL> <INPUT type="text" id="frequency"><BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">
    </P>
    </FORM>

    在客户端summit 后,服务器端可以
    1)建立TCP connection
    2)接受到client的第一个包:“POST /cgi/sss HTTP/1.1 HOST 192.168.1.5User-Agent:Mozi... ,“
    3)server 应该给client回答一下, 或者再申请, client 才会发送server 需要的申请。 或者, 还是别的什么? 这里就卡壳了。 因为数组比较多,不可以用get method.

    就这样,在server端一直没看到siteID 和 frequency 。

    因为我的server没有RTOS,只能通过对话的形式连接client。

    再次多些各位技术指导。让我这个二把刀更锋利一些。
    叩谢了
    • 是的,刚才用ethereal 试了一下, 第一个包从client 发给server是“POST /cgi/sss" 然后,server send back : "HTTP/1.0 200"
      because I don't know what to send back to client. And then client send "Continuation or non-http traffic". Looks like client is waiting for "Continuation " command. But what it is?
    • POST 应当直接发送数据:
      POST /cgi/sss HTTP/1.1
      Host: 192.168.1.5

      SiteID=123&Frequency=50
      • 不是啦。 get是直接发数据
        • post 也是。两个回车换行后面跟上。
          • 那, 一个数据包且不是很大? 我的buffer 只有54 个字。
            • User-Agent 那些都没用,只留下POST 和host, 在不行就只能发多次了。
            • 另外你得HTML里面有两个错误:input 应该用name而不使用ID, ID是后来的标准中出现的。Javascript才认得。
              • 改成name 了, 还是不行
                • 再加上一个Content-Length: 应该是可以的,刚才试了一下。
                  <FORM action="test.php" method="post">
                  <P>
                  <LABEL for="siteID">siteID: </LABEL> <INPUT type="text" name="siteID"><BR>
                  <LABEL for="frequency">Frequency (Hz): </LABEL> <INPUT type="text" name="frequency"><BR>
                  <INPUT type="submit" name="submit" value="Send"> <INPUT type="reset">
                  </P>
                  </FORM>


                  POST Header:
                  ------------------------------
                  POST /test/test.php HTTP/1.0\r\n
                  Content-Length: 35\r\n
                  Content-Type: application/x-www-form-urlencoded\r\n\r\n
                  siteID=123&frequency=50&submit=Send
                  • 你也在单片机上试的?
                    • 没有:(,不过协议应该是没有区别的。
                      • 我觉得是他处理不了大的package
                        • en, 我刚才写的3个变量就143字节了。不过看看楼主是怎么写程序的吧,当年写大屏幕的时候,发的数据可比这个大多了,一个48x48汉字就快300字节了
                          • 需要相应的内存吧。应该跟显存的道理一样
                            • 是的,外接的RAM.也不完全一样,那时候比较早,还是用串口发送的,跟后来用内存映射得没法比。
                  • POST应该要带Content-Length,用浏览器发request都会给你加上。
                    • I agree.
                • 在修改一下
                  POST Header:

                  POST /cgi/sss HTTP/1.0\r\n
                  Content-Type: application/x-www-form-urlencoded\r\n
                  Content-Length: 10\r\n\r\n

                  s=123&f=50

                  这样前面的部分可以固化,从contentlength 后面写buffer, input变量全部用单个字母。也不很大。
                  • 用GET不是更省?
                    • 要看server如何写的了
      • 再次感谢各位的帮助。目前的解决方法是,1. 扩大buffer size 2.改用get method, 3.chang ID to NAME。这样 server端就可以接收到数据了。 以前的问题主要是buf太小,引起checksum出错,这样ip 解包后以为数据无效