关于计算机网络 http协议 socket编程和http服务器

meran 2011-08-18 05:01:07
我想问几个问题哈。

首先 socket 是为了方便 TCP/IP 编程吧???

那么在 双方Socket关闭的情况下, TCP 连接是否也关闭了???

http协议的长连接,是需要 TCP 连接的实现吧?如何实现? 是通过不关闭 连接的 Socket么???

那解析http协议的职责是不是由http服务器来执行的??

如果关闭了 Socket 的输入流是否还可以再打开?



求大神指点啊

...全文
460 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
阳明 to life 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 zhouyuqwert 的回复:]

如果关闭了 Socket 的输入流是否还可以再打开?
可以的。
socket的输入流关闭之后,socket也关闭了,只能建立新的socket才行,原来的输入流根本不存在了
[/Quote]
忘了加红了。。
socket的输入流关闭之后,socket也关闭了,只能建立新的socket才行,原来的输入流根本不存在了
阳明 to life 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 softroad 的回复:]

首先 socket 是为了方便 TCP/IP 编程吧???
是的。或者说socket就是针对TCP/IP的

那么在 双方Socket关闭的情况下, TCP 连接是否也关闭了???
必须的。

如果关闭了 Socket 的输入流是否还可以再打开?
可以的。

[/Quote]
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才行,原来的输入流根本不存在了
meran 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zhouzhe1991 的回复:]
回帖获得10分
[/Quote]
哈哈 会给你的
TheStruggge 2011-08-19
  • 打赏
  • 举报
回复
回帖获得10分
meran 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 leehomwong 的回复:]
http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html
[/Quote]

看过了 这个真不行
24K純帥 2011-08-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html
meran 2011-08-19
  • 打赏
  • 举报
回复
先去借本书 ,下午回来 在听你详解。。。
meran 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 beiouwolf 的回复:]
http1.1中加入的keep-alive功能
只是原来1.0中,一次访问以后,这个连接输出完就被断开
就如keep-alive,只是让这个连接等待指定的延迟时间以后再断开,这段时间内,这个连接依然可以被使用
[/Quote]
这个是不是由 HTTP服务器 和 HTTP客户端 联合解析的???
beiouwolf 2011-08-19
  • 打赏
  • 举报
回复
http1.1中加入的keep-alive功能
只是原来1.0中,一次访问以后,这个连接输出完就被断开
就如keep-alive,只是让这个连接等待指定的延迟时间以后再断开,这段时间内,这个连接依然可以被使用
meran 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 beiouwolf 的回复:]
不知道你的这些结论是怎么得出来的
关于socket的理论,书上肯定说的比我清楚,无意在这上面争论什么

至于HTTP长连接,我不知道你指的是什么,如果说的是Keep-Alive功能,这并不是长连接的概念,准确的说是一次保持了Keey-Alive指定秒数的连接行为,但其本身仍然只是一次连接而已,至于comet之类的技术就不是http本身的范畴了
如果你说的是现在那种所谓的push推送,这也只……
[/Quote]

我的结论是在《数据通信与计算机网络》第二版 这本书上得来的。 我是想问一下 , 那 Keep-Alive 是要通过 HTTP服务器上的实现技术来实现的吧?
我还是大三学生,没你经验多啊。。。 下面的都有些看不懂了。。。 我再做下实验吧。 等不会的再请教
waynell 2011-08-19
  • 打赏
  • 举报
回复
我也有同样的疑问,也正在学习。建议楼主先别着急结贴,希望能有一个满意的答案。
lisve2010 2011-08-19
  • 打赏
  • 举报
回复
好久没摸过 忘了
beiouwolf 2011-08-19
  • 打赏
  • 举报
回复
不知道你的这些结论是怎么得出来的
关于socket的理论,书上肯定说的比我清楚,无意在这上面争论什么

至于HTTP长连接,我不知道你指的是什么,如果说的是Keep-Alive功能,这并不是长连接的概念,准确的说是一次保持了Keey-Alive指定秒数的连接行为,但其本身仍然只是一次连接而已,至于comet之类的技术就不是http本身的范畴了
如果你说的是现在那种所谓的push推送,这也只是在servlet上人为的用while保持连接不断开,不停的往outputStream里写数据的方式来做到的,但是这种方式却是应用服务器的灾难,每个请求都会被分配到一个servlet执行线程,而这个线程却在页面打开的情况下不会被中断掉
至于glassfish或者jetty用线程池来增强线程利用效率的做法,本质上还是一样的
meran 2011-08-19
  • 打赏
  • 举报
回复
例子举的很不恰当 , TCP/IP不可能是电话线,用你的例子,比如我们两个人打电话 不同的语言肯定不行的,建立TCP连接过程的例子 相当于双方都识别对方身份并表示可以讲话了,之后的就是应用层协议的事情 。电话线是物理层吧? ????因为就算你挂了电话 电话线却不会断掉,断了的只是一次TCP连接而已。socket 一方关闭流另一方并不会关闭, 如果不信请做实践。因为socket是单向双工。 HTTP 是应用层的协议 , 是基于 TCP/IP实现的。 HTTP 长连接你可以 百度一下,另外 http已经支持长连接了, HTTP 协议有它的报头和报文, 服务器需要解析报文,html 只是基于 http 传输的一种数据格式而已。


计算机网络我也学过。
meran 2011-08-19
  • 打赏
  • 举报
回复
哈哈 。。。。



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


结贴了,谢谢大家
liuzhengkang 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 beiouwolf 的回复:]

应该说...不知道怎么回答你的问题...很多基础的东西还是要好好看书的
首先...SOCKET和TCP/IP
TCP/IP是一种协议,也是数据流的定义方法的规定,它本身不能做任务事情,只是一组规定
SOCKET是一种实现,俗称的套接字,可以理解为两方使用TCP/IP情况下的数据传输的管道
打个比方:TCP/IP就是我们说的话,中文,SOCKET就是电话线
两个人通道socket这根电话……
[/Quote]
支持哥们的观点。楼主是看错了吧,socket比喻电话线而不是TCP/IP。
Socket 的输入流关闭应该是还可以再打开,但Socket关闭,输入流是绝对不能再打开,只能重新连接打开。
http长连接我也没听说过,只听过socket的长连接。
不过这位哥们说的:“comet之类的技术,每个请求都会被分配到一个servlet执行线程”,这个我不赞同。
可以看看像pushlet这样的推技术,是在一个servlet,通过doGet/doPost方法被调用,
通过对事件的订阅,获取各个client自己想要的信息,根本就不会出现“应用服务器的灾难”。


scare111 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 zhouyuqwert 的回复:]

引用 29 楼 scare111 的回复:

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

非连接就不能是socket了?

Socket types

There are several Internet socket types available:

Datagram sockets, also kno……
[/Quote]
。。记错了。。哈哈~
scare111 2011-08-19
  • 打赏
  • 举报
回复
简单解释下:
TCP/IP,一个是传输层,一个在网络层
TCP协议,是面向有连接的,实现了重传的功能等,不会丢包等功能(网络传输难免丢包)
而UDP是无连接的,传丢了就丢了,所以有丢包率。你网络电话,都是UDP的,所以声音有点模糊。
Socket是一个实现TCP的实现,流是封装了很多底层操作后,抽象出来的传输。
打开一个Scoket连接,浪费很大时间,因为要三次握手。
原来的情况是,你访问一个资源(未必是网页,可能是其它资源)打开一次连接,然后关闭。
在http1.1里面,有个keep-alive的头,指明了保持连接
就是可以在一个连接里,传输多个文件,节约了打开的时间。
至于关闭连接,可以在tcp协议里看下如何关闭的连接的。浏览器和服务器,都应该有断开连接的权利。
若是用java,你可以看下JSR154,里面有写基本容器功能,记得配合rfc2616(http 1.1),内容不多。一共500页,英文的。
顺便看看网络的那几层协议,自然就明白了。
阳明 to life 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 scare111 的回复:]

那DatagramSocket不是socket么
那个是UDP的。非连接的,是基于package的。
[/Quote]
非连接就不能是socket了?

Socket types

There 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]
黎某人 2011-08-19
  • 打赏
  • 举报
回复
另外参考下这个帖子,讲TCP/IP与socket的关系的
http://www.cnblogs.com/riacool/archive/2010/12/14/1905404.html
加载更多回复(16)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧