iwsyang 2009-08-11 04:24
浏览 247
已采纳

java socket 有问题,要求教

我要做一个从天气预报的网站取得数据的小程序,要求是用socket来做,那个服务器要求的格式是这样的:
POST /globalweather.asmx/GetCitiesByCountry HTTP/1.1
Host: www.webservicex.net
Content-Type: application/x-www-form-urlencoded
Content-Length: length
CountryName=string

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
string

我做了这个小程序,返回了部分的头信息,但最主要的string返回内容没有给我, 我是按照它提供的格式的啊,问题在哪?
还有就是我把请求的格式变成HTTP/1.0 才能运行,如果按格式要求的写成HTTP/1.1 ,根本就运行不了,这是什么原因?
import java.io.*;
import java.net.*;

public class TCPClient {

public static void main(String argv[])throws Exception {

final int HTTP_PORT=80;

Socket socket1 = new Socket("www.webservicex.net", HTTP_PORT);

BufferedWriter out= new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream()));

BufferedReader in= new BufferedReader(new InputStreamReader(socket1.getInputStream()));

out.write("POST /globalweather.asmx/GetCitiesByCountry HTTP/1.0\r\n");
out.write("Host: www.webservicex.net\r\n");
out.write("Content-Type: application/x-www-form-urlencoded\r\n");

  String body = "CountryName=china\r\n"; 
  out.write("Content-Length: " + body.length() + "\r\n"); 
  out.write("\r\n"); 

  out.write(body); 
  out.flush();  

  String line;  
  StringBuffer sb=new StringBuffer();  
  while((line=in.readLine())!=  null)  {  
      sb.append(line+"\r\n");  
  }  
  out.close();  
  in.close();  
  System.out.println(sb.toString());  
}  

}

  • 写回答

2条回答 默认 最新

  • lixjluck 2009-08-11 09:54
    关注

    这不是标准的HTTP协议吗
    干嘛还自己写一个Socket
    可以直接使用apache的httpClient

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题