你是怎样模拟post的?
既然URLConnection可以,为什么不用?
既然URLConnection可以,为什么不用?
解决方案 »
- 断点续传时先测出已下载文件的大小,再用InputStream的skip()跳转可以吗?
- 求一个好看的JAVA风格包 大家有好看的都分享下吧....
- td里面,想放个table在个button右边请问怎么放?
- 请问java有关类说明的时候“副本”的概念?
- 请大家帮我看一下,编译时好像没有错,但是执行时却有一点问题.
- 关于反射中对象被改变的一点问题
- 怎样控制日期的显示格式?
- 我想做一个java教学网,大家感觉怎么样呢,我来主讲·····222
- java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?(在线等)
- java中ArrayList的几个问题!
- java调用本地c方法问题,怎么生成CPP或C文件啊?
- jbutton在页面中怎么不能识别回车,但能识别空格键?
Connection:close
所以输入流就关了400 是Bad Request,当把 http/1.0改为 http/1.1时,可能是WEBSERVER不支持HTTP/1。1所以就会出现这样的问题。
你可以看看RFC1945(HTTP/1。0)和RFC2068(HTTP/1。1)
这个字段的含义是指出在把数据全部发送到客户端后服务器端关闭连接吧?服务器端还没有把所有的数据都接受完怎么就能关闭输入流呢?(我对http协议没有深入研究,这是我的理解不知对不对)webserver 对 http/1.1 是完全支持的,这从sun对 HttpURLConnection 的实现上能够确定,HttpURLConnection实现的就是 1.1版我想是不是某些字段没有设置造成这种情况的
另外上面的程序在windows平台上可以正常执行但是在unix平台上就不行还请高手继续指点
继续感谢!
email:[email protected]
非常感谢
BufferedReader is=null;
try
{
url=new URL(strUrl);
int port=url.getPort();
if(port==-1) port=80;
String host=url.getHost();
String file=url.getFile();
if(file.equalsIgnoreCase(""))file="/";
socket=new Socket(host,port);
socket.setSoTimeout(timeout); out=new PrintStream(new BufferedOutputStream(socket.getOutputStream())); int len=toGMLC.length();
String head="POST "+file+" HTTP/1.1\r\n";
head+="Content-type:application/x-www-form-urlencoded\r\n";
head+="Content-Length:"+len+"\r\n";
head+="\r\n"; head+=toGMLC;
out.print(head);
out.flush();
is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s="",s2="";
while((s=is.readLine())!=null)
{
s2+=s+"\r\n";
}
int pos=s2.indexOf("\r\n\r\n");
fromGMLC=s2.substring(pos+4);
}catch(InterruptedIOException e2){
iserr=true;
errId=1;
err="请求数据超时";
}catch(Exception ex){
iserr=true;
errId=2;
err=ex.toString();
}finally{
try{
if(socket!=null)socket.close();
}catch(Exception e){}
return fromGMLC;
}
}
1:在JAVA中,"\r\n"好象不是CRLF(两个字节),是4个字节
2:我认为你的REQUEST 数据应该用“iso-8859-1”编码。
3:去掉socket.setSoTimeout(timeout);这一句试试。
客户端接收从服务器端发来的数据是没有问题的是服务器端的sevlet从自己的输入流读取数据时出问题
改成int len = toGMLC.getBytes().length;试试呢?