我想问几个问题哈。首先 socket 是为了方便 TCP/IP 编程吧???那么在 双方Socket关闭的情况下, TCP 连接是否也关闭了???http协议的长连接,是需要 TCP 连接的实现吧?如何实现? 是通过不关闭 连接的 Socket么??? 那解析http协议的职责是不是由http服务器来执行的??如果关闭了 Socket 的输入流是否还可以再打开?求大神指点啊  

解决方案 »

  1.   

    首先 socket 是为了方便 TCP/IP 编程吧???
        是的。或者说socket就是针对TCP/IP的那么在 双方Socket关闭的情况下, TCP 连接是否也关闭了???
        必须的。http协议的长连接,是需要 TCP 连接的实现吧?如何实现? 是通过不关闭 连接的 Socket么??? 
        应该是有个链接时间。那解析http协议的职责是不是由http服务器来执行的??
        是的如果关闭了 Socket 的输入流是否还可以再打开?
        可以的。纯属猜测。
      

  2.   

    .什么是socket
      所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
    重要的Socket API
      重要的Socket API:java .net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。
      Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
      getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。
      getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均可能会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
      

  3.   


    肯定百度的。。明天去图书馆搞本 unix 网络编程来研究下吧看来还是得自己实验了。。
      

  4.   

    不知道你的这些结论是怎么得出来的
    关于socket的理论,书上肯定说的比我清楚,无意在这上面争论什么至于HTTP长连接,我不知道你指的是什么,如果说的是Keep-Alive功能,这并不是长连接的概念,准确的说是一次保持了Keey-Alive指定秒数的连接行为,但其本身仍然只是一次连接而已,至于comet之类的技术就不是http本身的范畴了
    如果你说的是现在那种所谓的push推送,这也只是在servlet上人为的用while保持连接不断开,不停的往outputStream里写数据的方式来做到的,但是这种方式却是应用服务器的灾难,每个请求都会被分配到一个servlet执行线程,而这个线程却在页面打开的情况下不会被中断掉
    至于glassfish或者jetty用线程池来增强线程利用效率的做法,本质上还是一样的
      

  5.   


    我的结论是在《数据通信与计算机网络》第二版  这本书上得来的。  我是想问一下 , 那 Keep-Alive  是要通过 HTTP服务器上的实现技术来实现的吧?
    我还是大三学生,没你经验多啊 下面的都有些看不懂了 我再做下实验吧。 等不会的再请教
      

  6.   

    http1.1中加入的keep-alive功能
    只是原来1.0中,一次访问以后,这个连接输出完就被断开
    就如keep-alive,只是让这个连接等待指定的延迟时间以后再断开,这段时间内,这个连接依然可以被使用
      

  7.   

    这个是不是由 HTTP服务器 和 HTTP客户端 联合解析的???
      

  8.   

    http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html
      

  9.   

    http我不太知道。
    socket说下我的理解
    4楼几个地方应该是有问题的
    首先 socket 是为了方便 TCP/IP 编程吧???
        是的。或者说socket就是针对TCP/IP的
    那DatagramSocket不是socket么那么在 双方Socket关闭的情况下, TCP 连接是否也关闭了???
      必须的。
    我觉得TCP连接既然是端到端连接,肯定一方关闭了就关闭了
    但是可以写个程序试下,假如server关闭了实际上client还可以通过原先已连上的socket进行write read
    只不过write出去没人接收,read会阻塞
    如果关闭了 Socket 的输入流是否还可以再打开?
      可以的。
    socket的输入流关闭之后,socket也关闭了,只能建立新的socket才行,原来的输入流根本不存在了
      

  10.   

    忘了加红了。。
    socket的输入流关闭之后,socket也关闭了,只能建立新的socket才行,原来的输入流根本不存在了
      

  11.   

    如果关闭了 Socket 的输入流是否还可以再打开
    不可以打开的。。
    http协议的长连接,是需要 TCP 连接的实现吧?如何实现? 是通过不关闭 连接的 Socket么???
    是的,常连接是在http1.1加入的。。具体如何判断是否是常连接,在RFC2616可以查的到的。。
      

  12.   

    那DatagramSocket不是socket么
    那个是UDP的。非连接的,是基于package的。
      

  13.   

    首先 socket 是为了方便 TCP/IP 编程吧???
    对那么在 双方Socket关闭的情况下, TCP 连接是否也关闭了???
    对http协议的长连接,是需要 TCP 连接的实现吧?如何实现? 是通过不关闭 连接的 Socket么??? 
    TCP是底层的通信协议,Socket是实现数据通信的API,所谓一般的http都是这样的过程:请求-相应-关闭
    长连接就是请求建立连接-(随便客户端和服务器做什么,比如收发数据),当一方主动关闭或者网络异常,这个连接也就关闭了
    那解析http协议的职责是不是由http服务器来执行的??
    对,关于这个你可以写一个serversocket并且监听8888端口(随便什么端口),然后用浏览器访问这个地址和端口,你再服务端读取浏览器发送的字符串你就知道了,你自己也就可以解析了如果关闭了 Socket 的输入流是否还可以再打开?
    关闭了socket,这个socket也就失效了,除非新建立一条连接
      

  14.   

    另外参考下这个帖子,讲TCP/IP与socket的关系的
    http://www.cnblogs.com/riacool/archive/2010/12/14/1905404.html
      

  15.   

    非连接就不能是socket了?Socket typesThere are several Internet socket types available:    Datagram sockets, also known as connectionless sockets, which use User Datagram Protocol (UDP)
        Stream sockets, also known as connection-oriented sockets, which use Transmission Control Protocol (TCP) or Stream Control Transmission Protocol (SCTP).
        Raw sockets (or Raw IP sockets), typically available in routers and other network equipment. Here the transport layer is bypassed, and the packet headers are not stripped off, but are accessible to the application. Application examples are Internet Control Message Protocol (ICMP, best known for the Ping suboperation), Internet Group Management Protocol (IGMP), and Open Shortest Path First (OSPF).[2]
      

  16.   

    哈哈        。弄了一本 《unix 网络编程》 神书一本 ,看过第二章之后基本就可以明白了哈哈感觉  计算机网络学的还是不太给力啊~~哈哈。  
    结贴了,谢谢大家