解决Java Socket中POST No Response 的BUG
来源:互联网 发布:vb语言可以干什么 编辑:程序博客网 时间:2024/05/18 02:34
通常根据习惯来说,新建一个BufferedReader 来监听输入端口。
其实在POST的内容中,最后一行是没有“\n”的,所以造成最后一行,也就是POST的内容不能被读取,并且程序停止响应。
这里有一个方法来解决这个问题。
首先查看HTTP报文:
这样,POST的值就存在clientSentence 里面了。然后,处理数据呗。
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
然后用while循环进行 ReadLine();
不过,会碰到怎么着都读不出POST内容的问题。其实在POST的内容中,最后一行是没有“\n”的,所以造成最后一行,也就是POST的内容不能被读取,并且程序停止响应。
这里有一个方法来解决这个问题。
首先查看HTTP报文:
connection from Socket[addr=/127.0.0.1,port=4996,localport=2000] onSocket:4996 POST / HTTP/1.1 / Host: localhost:2000 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/20 08070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://localhost:2000/index.html Content-Type: application/x-www-form-urlencoded Content-Length: 109 // here
这里,我们可以看到Content-Length返回了一个POST的长度。
根据程度进行Read(),而不是直接去ReadLine();。因为没有Line可以Read。找不到行结束符。这样就获得了Content-Length。
while((!clientSentence.equals(""))) { clientSentence = inFromClient.readLine(); System.out.println(clientSentence); // here to fix post no response bug if(clientSentence.startsWith("Content-Length")) { try { contentLength = Integer.parseInt(clientSentence.substring(clientSentence.indexOf(':') + 1).trim()); } catch (Exception e) { e.printStackTrace(); } } }
char[] tmpPost = new char[contentLength]; for(int i = 0; i < contentLength; i++) { tmpPost[i] = (char)inFromClient.read(); clientSentence += String.valueOf(tmpPost[i]); }
- 解决Java Socket中POST No Response 的BUG
- 解决 Java MongoDB Driver 中 Update 方法的Bug
- Form post File BUG 解决
- 在JAVA中使用Socket和C#通讯的解决
- 在JAVA中使用Socket和C#通讯的解决
- JAVA SOCKET POST
- JAVA SOCKET POST
- Android2.2 Socket关闭Bug的解决方…
- Node.js 基于socket.io聊天室的BUG解决经过
- php中post键值过多引起的一个bug
- 项目中bug的解决思路
- 项目中bug的解决思路二
- 项目中一个Bug的解决过程
- linux socket的bug??
- 解决response.sendirect()中target属性的办法
- Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug
- request、response、post、get的区别
- Apache+PHP5+Mysql中收取Socket的POST数据问题
- epoll vs poll
- wxWidges类列表
- JNI简要介绍
- 无废话Cheetah
- 没有“架子”的冠军
- 解决Java Socket中POST No Response 的BUG
- 软件测试之单元测试全攻略
- 精选最新优秀源码下载网站
- 学习流程
- HALCON图像处理软件
- 对于sql server 数据库更新配置,启用系统目录的特殊更新
- 机器视觉应用领域
- asp.net转出 json格式 客户端显示时间
- 电子钱包项目的阶段总结