正在学习socket,但不知怎么才能接收到第二张主页面,哪位大兄帮忙看看
接收安装在我电脑的一个邮件服务器的主页面import java.net.*;
import java.io.*;
public class HTTPClient {
  public static void main(String args[])throws Exception{
    Socket socket=new Socket("localhost",6080);
    String frontOfRequest="GET ";
    String URL="/admin/login.php?f_user=admin&f_pass=123";
    String endOfRequest=" HTTP/1.1\r\n"
+"Host: localhost\r\n"
+"Accept: */*\r\n"
+"Accept-Language: zh-cn\r\n"
+"Accept-Encoding: gzip, deflate\r\n"
+"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"
+"Connection: Keep-Alive\r\n";
    String cookie=null;    OutputStream socketOut=socket.getOutputStream();
    PrintWriter pw=new PrintWriter(socketOut,true);
    pw.println(frontOfRequest+URL+endOfRequest);    InputStream socketIn=socket.getInputStream();
    BufferedReader br=new BufferedReader(new InputStreamReader(socketIn));
    String data;
    int line=1;
    while((data=br.readLine())!=null){
      switch(line){
case 4:cookie=data.substring(4)+"\r\n";break;
case 5:cookie=cookie+data.substring(4)+"\r\n";break;
case 6:cookie=cookie+data.substring(4)+"\r\n";break;
      }
line++;
      System.out.println(data);
    }    URL="/admin/main.php";
    pw.println(frontOfRequest+URL+endOfRequest+cookie);
    while((data=br.readLine())!=null){
      System.out.println(data);
    }
       
    socket.close();
  } 
}返回来的结果是
HTTP/1.1 200 OK
Date: Wed, 28 Oct 2009 02:50:30 GMT
Server: Apache
Set-Cookie: magicwinmail_admin_default_language=ch_gb; expires=Friday, 27-Nov-09 02:50:30 GMT
Set-Cookie: magicwinmail_admin_errorpwd_retry=deleted; expires=Tuesday, 28-Oct-08 02:50:29 GMT
Set-Cookie: magicwinmail_admin_errorpwd_times=deleted; expires=Tuesday, 28-Oct-08 02:50:29 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html161
?
|Q=O?湅?0瀈H?-j軄????槐冧バ?w鑴梬黛;輠蝟6镫鈑縀O烹?w蟢?B>?!沚/f閤倞枡N伈?刲唣犏*棤

苶錤从结果看是第一个请求得到了响应,但第二次请求main.php时没有响应,是第二次的消息没有发出去还是没有接收到东西呢,就算是错误消息都没有给我一个还有就是怎么会是乱码啊正文,这里面又没有什么特殊字符的,如果换成下面这样就不是乱码了
URL url=new URL("http://localhost:6080/admin/login.php?f_user=admin&f_pass=123"); 
InputStream in=url.openStream();
InputStreamReader inputStreamReader=new InputStreamReader(in);
BufferedReader br=new BufferedReader(inputStreamReader);
String temp=null;
while((temp=br.readLine())!=null){
System.out.println(temp);
}
返回结果就不是乱码的了,不过这两种都是inputStream啊,只是改成了用URL类来发送,是我发送的协议存在问题?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
        <form name="form1" action="main.php" method=post>
                <input type=hidden name=sid value="285774ae7b31da030f">
                <input type=hidden name=lid value="0">
    </form>    <br>
        <h3>Loading...</h3>
</body><script language="Javascript">
        document.form1.submit();
</script></html>总之让我把main.php这张页面给取到啊,急死个人了

解决方案 »

  1.   

    URL发送不是挺好么,为啥要用socket
      

  2.   

    URL url1=new URL("http://localhost:6080/admin/login.php?f_user=admin&f_pass=123"); 
    URL url2=new URL("http://localhost:6080/admin/main.php);
    这样吗?这样得到的main.php提示我没有登陆啊,我得让给我main页面的内容 
      

  3.   

    Socket 与 ServerSocket 请求——响应;结束之后自己断开连接。
    你第一个outPutStream.println();后,ServerSocket 接到信息。发送回应数据,断开连接。
    第二个pringln();就发不出去了。
      

  4.   

    若是能改服务端的代码就能用一个socket发送多次。不然就得重new个socket再发
      

  5.   

    服务器不是我写的啊  是网上下的一个安装的  
    刚学socket的  新建个socket的话session就不一样了吧
    我们平时登录yahoo或163邮箱时总不会是建的多个socket的吧
      

  6.   

    每个url请求都是一个新的socket.你可以写个ServerSocket测一下。
      

  7.   

    总得让我先学会做客户端吧   每个url请求是一个新的socket  但下一个url时返回的结果是未登录啊
    毕竟已登陆是保存在上一个连接的session中的
      

  8.   

    session只存在于服务端,客户端要有一个标识唯一对应服务端的一个session.这个标识可能是在cookies中,也可能是别的方法。不同的服务器的标识是不同的,你先要知道你用的服务器用什么来对应session;
    (这是由浏览器做的。)
    分析分析返回值,应该可以看出来。<input type=hidden name=sid value="285774ae7b31da030f"> 
    <input type=hidden name=lid value="0"> 
    这是什么?
      

  9.   

    sid是一个随机数,lid表示语言
    这两个也要给回去?试下
      

  10.   

    得了  sid带上就好了  看了下他那个页面这数确实与session有关的这下是主要问题解决了,但那个乱码能解释下不  不然就给结贴了
      

  11.   

    你把用urlConnection发送请求的返回值弄出来,和socket发的比较着看。主要看不是乱码的地方
      

  12.   

    那个不是乱码,是因为你请求的时候穿的参数是支持gzip的,所以,返回给你的是gzip的数据包,并不是乱码!
    两个解决办法:
    1、要么接收数据的时候解析gzip数据包
    2、修改代码:Accept-Encoding: deflate\r\n