各位,我客户端用 URLConnection向服务端发送数据,服务端我用socket来接收,怎么接收不到想要的数据?只能收到如下内容:POST /a.lif HTTP/1.1Content-type: text/xmlUser-Agent: Java/1.4.1_02Host: 127.0.0.1:10444Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2Connection: keep-aliveContent-Length: 9 

解决方案 »

  1.   

    服务端程序:
    import java.io.*;
    import java.net.*;public class server extends Thread
    {
    private Socket s;
    server(Socket s)
    {
    this.s=s;
    }
    public static void main(String[] args){

    try
    {
    ServerSocket ss=new   ServerSocket(10444);
    System.out.println("监听10444开始");
    while(true)
    {
    Socket client=ss.accept();
    server threads=new server(client);
    threads.start();
    }
    }
    catch(Exception ex){
    System.out.println(ex);
    }
    }
    public void run()
    {
    try{
             BufferedReader  in=new BufferedReader(new InputStreamReader(s.getInputStream()));
    PrintWriter out=new PrintWriter(s.getOutputStream());


    while(true){
     String str=in.readLine();
     
     System.out.println(str);

     out.write("服务端正在接收...");
     out.flush();
     if(str.length()==0)
     {
     
      break; 
    }
    }

    out.write("服务端接收完毕");
    out.flush();
    System.out.println("接收完毕");
    in.close();
    out.close();
    s.close();

    }
    catch(Exception ex){
    ex.printStackTrace();

    }
    }
    }
      

  2.   

    客户端程序:
    import java.io.*;
    import java.net.*;
    public class client{
    public static void main(String[] args){
    try{
    URL myurl=new URL("http://127.0.0.1:10444/a.lif");
    HttpURLConnection myurlcon=(HttpURLConnection)myurl.openConnection();
    myurlcon.setDoOutput(true);
    myurlcon.setDoInput(true);
    myurlcon.setDefaultUseCaches(false);
    myurlcon.setUseCaches(false);
    myurlcon.setRequestMethod("POST");  myurlcon.setRequestProperty("Content-type","text/xml");
    String str="<xml>";
    String strlength=new Integer(str.length()).toString();
    myurlcon.setRequestProperty("Content-length",strlength);

    myurlcon.connect();

    DataOutputStream outStream = new DataOutputStream(myurlcon.getOutputStream()); 
    outStream.writeBytes(str); 
    outStream.flush(); 
    outStream.close(); 
    BufferedReader  in=new BufferedReader(new InputStreamReader(myurlcon.getInputStream()));

    String strread;
    while((strread=in.readLine())!=null){
           System.out.println(strread);
    }
    in.close();
    }
    catch(Exception ex){
    ex.printStackTrace();
    }
    }
    }
      

  3.   

    不好意思确实少收了一点点 
    而且content-length怎么等与9了呢 <xml> 只有5 阿不知道为什么
    难道outStream.writeBytes(str); 进去的不是<xml>
      

  4.   

    哦,content-length:5,上面的我曾经改过,不好意思,^_^。
    我的意思是,怎么发送的这个字符串,收不到呢,只能得到长度,怎么才能得到内容的?
      

  5.   

    你程序中下面这段有问题,在 HTTP request 的 Head 和 Body 之间,是有一个空行的。if(str.length()==0)
    {
       break; 
    }
      

  6.   

    to:maquan
    我服务端程序改为下面的形式,可还是没收到啊循环不停了
    服务端程序:
    import java.io.*;
    import java.net.*;public class server extends Thread
    {
    private Socket s;
    server(Socket s)
    {
    this.s=s;
    }
    public static void main(String[] args){try
    {
    ServerSocket ss=new   ServerSocket(10444);
    System.out.println("监听10444开始");
    while(true)
    {
    Socket client=ss.accept();
    server threads=new server(client);
    threads.start();
    }
    }
    catch(Exception ex){
    System.out.println(ex);
    }
    }
    public void run()
    {
    try{
             BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
    PrintWriter out=new PrintWriter(s.getOutputStream());String str;
    while((str=in.readLine())!=null){
      System.out.println(str); out.write("服务端正在接收...");
     out.flush();
     }out.write("服务端接收完毕");
    out.flush();
    System.out.println("接收完毕");
    in.close();
    out.close();
    s.close();}
    catch(Exception ex){
    ex.printStackTrace();}
    }
    }
      

  7.   

    类似这样的代码,从文件中读空行没问题啊,怎么读取http请求就不行了呢
    while((str=in.readLine())!=null){
      System.out.println(str);
     }
      

  8.   

    TCP 传输是没有“数据边界”的,你只能根据传输的内容来自己判定数据边界。类似的代码,在读取文件的时候,总会遇到“文件结束”,所以,EOF 就是自然的数据边界。从 socket 里读的时候,如果你也指望通过 EOF 得到数据边界,就只能在发送方关闭 socket,这样,在接收方的效果就是 EOF。但你这段程序, client 在发送一些数据后,还要等 server 返回一些内容,显然不能关闭 socket。如果硬要做,可以试试 socket.shutdownOutput()。通过关闭 socket 来向对方表明数据边界,终究不是什么好办法。其实,我也被这个问题困扰。希望有经验的大侠能指教,有没有什么好一点的办法?