我服务器端代码:
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class DemoService extends HttpServlet{
    private static final long serialVersionUID = 1589233260870765446L;    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doPost(req, resp);
    }    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        
        // 从请求中获取客户端传入的流信息
        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(req.getInputStream()));
        try {
            // 获取客户端传来的信息对象        
            System.out.println((String)in.readObject());            
            in.close();
            
            // 将信息返回给客户端
            ObjectOutputStream out = new ObjectOutputStream(resp.getOutputStream());
            out.flush();
            
            // 将信息对象传给客户端 
            out.writeObject("给客户端返回的结果,就是我啦!");
            out.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
}
客户端代码
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;public class DemoTestHttpURLConnection {
    public static void main(String[] args) throws Exception {
        
        // 传给对方参数,也可以是对象(此处的对象必须是可序列化的对象)
        String sMessage = "客户端传入到服务区点数据了!" + DemoTestHttpURLConnection.class.getName();
        
        // 服务器地址
        URL url = new URL("http://127.0.0.1:8088/test");
        
        // 打开地址
        URLConnection con = url.openConnection();
        
        //System.out.println(con.getContentType());
        
        
        // 指示应用程序要从 URL 连接读取数据
        con.setDoInput(true);
        
        // 指示应用程序要将数据写入 URL 连接
        con.setDoOutput(true);
        
        // 设置一般请求属性 (不设置也没什么关系 :)
        
        con.setRequestProperty("Content-Type", "text/html;charset=ISO-8859-1");
                
        // 从Url连接中获取输出流 (即:将该流传给服务器)
        OutputStream out = con.getOutputStream();        
        ObjectOutputStream objStream = new ObjectOutputStream(out);
        
        // 将之前设置的好的对象传入给服务器
        objStream.writeObject(sMessage);
        objStream.flush();
        objStream.close();
        out.close();
                
        // 从Url连接中获取输入流信息 (即:服务器的输出流信息)
        InputStream in = con.getInputStream();        
        ObjectInputStream back = new ObjectInputStream(in);
        
        // 得到服务器对象信息!
        System.out.println((String)back.readObject());
        
        back.close();
        in.close();
    }
}情况:
配置好服务器后执行测试代码,提示如下错误
Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 0D0A0D0A
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at DemoTestHttpURLConnection.main(DemoTestHttpURLConnection.java:47)
我的需求是想从服务器端获取一个字符串,就想到用java的URLConnection,但是没用过,大家帮看看是什么问题,先谢谢了

解决方案 »

  1.   

    1  试试把 127.0.0.1改为本地ip
    2  加入sys输出调试或者断点   测试输出。
      

  2.   

    不行  不好调试  都是stream之类的
      

  3.   

    LZ的问题出在用ObjectInputSteam去读response的header部分,这肯定会出问题解决:先用别的流(例如BufferReader装饰InputStream)读出response  header,读到空行后就是response的内容,再用ObjectInputStream读取
      

  4.   

    建议LZ看看这个贴:http://topic.csdn.net/u/20090625/22/59a5bfc8-a6b6-445d-9829-ea6d462a4fe6.html?32347
    会有帮助!