我的代码如下:注意下面红色字体的代码,如果没有他们,运行起来,服务器端对第二次发送的数据没有相应;
但如果加上,服务器就有相应
不知是什么原因,为什么要先将套接字断开一次???
谢谢,真不知道了···
Socket socket = new Socket("166.111.4.97", 80 ); System.out.println( InetAddress.getByName("166.111.4.97").getHostName() );
BufferedOutputStream sender    = new BufferedOutputStream( socket.getOutputStream()  ); 
BufferedInputStream  receiver  = new BufferedInputStream (  socket.getInputStream()  );String senderMessage;
String receiverMessage;
String headerPath = "/pls/bfjd_wwwpub/XK1.ShowMainPage ";
//send an HTTP request to the web server
···
sender.write( senderMessage.getBytes(), 0, senderMessage.getBytes().length );
sender.flush();//read the response     byte  buffer[] = new byte[1025];
temp = 0;
while (temp != -1) 
{
temp = receiver.read( buffer );
if( temp != -1 )
      System.out.println( temp + "\r\n" + new String( buffer ) );
}
 String receiveBuffer = new String( buffer );
        
socket.close();
socket = new Socket("166.111.4.97", 80 ); 
sender    = new BufferedOutputStream( socket.getOutputStream()  ); 
receiver  = new BufferedInputStream (  socket.getInputStream()  );
·····
sender.write( senderMessage.getBytes(), 0, senderMessage.getBytes().length );
sender.flush();
System.out.println( senderMessage + "\r\n" + "发送完毕\r\n");
        
temp = 0;
while (temp != -1) 
{
temp = receiver.read( buffer );
if( temp != -1 )
      System.out.println( temp + "\r\n" + new String( buffer ) );
}

解决方案 »

  1.   

    恩,这种情况只看一端是不好看出问题的。app1.cic.tsinghua.edu.cn?
      

  2.   

    答:HTTP1.1协议中为了提高性能,采用了"TCP的长连接",即:HTTP中的Connection: Keep-Alive进行工作的.当你用红色的socket.close(); 再打开的方式,其本质是:返回到HTTP1.0的老的 Connection: close  即:每一次TCP连接,只传一次数据,然后关闭.下一次再要数据,要再次打开TCP连接.这个性能就差了.
    而Connection: Keep-Alive是一次TCP连接,传递多次数据.
    你按TCP长连接 来写你的TCP程序,进行接收与发送数据就行了.
      

  3.   

    80端口的http协议不是这么用的。 楼上说的很好,如果你不指定keep-alive则默认会关闭连接的(当然也看服务器的默认配置).所以,读取内容最好是打开这个keep alive,然后记得读取返回头里面的content-length的数据,然后马上发送下一个请求就行了。
      

  4.   

    LS两个说得都很对。实际的开发中,是有现成的http开发包给你用的,比如httpclient,功能强大,一些http头的设置,cookie等等都可以很方便的设置,你自己写一个不是不可以,但是相当于自己又造了个汽车轮子,当然测试的除外。另外,建议LZ看一下TCP/IP协议三卷本的应用协议部分。