java socket中io流的疑惑

自傷無色丶 2016-03-03 01:08:14
加精
新人求问out=new printstream(client.getoutputstream())这里为什么不是client.getinputstream,对服务端是输出,但对于客户端是输入啊,不知道哪里理解错了,求大神指点
...全文
3221 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzjjava 2016-03-14
  • 打赏
  • 举报
回复
引用 26 楼 skgary的回复:
[quote=引用 24 楼 qq_28163175 的回复:]
谢谢大家的帮助,昨晚上想了一想总算想明白了,之前是我走入了一个误区,将server.accept()返回的socket当成是客户端那边的socket得了,其实客户端那边的socket是属于客户端的,而对应的服务器也要有一个socket与连接的客户端相对应,服务器就好比一个大的蓄水池,要往很多小水池(客户端)输水,那么大蓄水池就要针对每个小蓄水池开一个口用于输水。这是昨晚上帮助理解后画的图 再次感谢楼上几位大哥的帮助,谢谢!!



其实这个图的理解还是有点问题的,下图是我说的意思


[/quote] 层主这个图符合通信的过程,tcp连接过程服务器得先创建一个服务器套接字,之后当有客户端请求连接是,服务器会另外创造一个socket与客户端socket连接
自傷無色丶 2016-03-10
  • 打赏
  • 举报
回复
引用 26 楼 skgary 的回复:
[quote=引用 24 楼 qq_28163175 的回复:] 谢谢大家的帮助,昨晚上想了一想总算想明白了,之前是我走入了一个误区,将server.accept()返回的socket当成是客户端那边的socket得了,其实客户端那边的socket是属于客户端的,而对应的服务器也要有一个socket与连接的客户端相对应,服务器就好比一个大的蓄水池,要往很多小水池(客户端)输水,那么大蓄水池就要针对每个小蓄水池开一个口用于输水。这是昨晚上帮助理解后画的图 再次感谢楼上几位大哥的帮助,谢谢!!
其实这个图的理解还是有点问题的,下图是我说的意思 [/quote] 赞!层主我能借用下你的图吗?我写博客里
skgary 2016-03-08
  • 打赏
  • 举报
回复
引用 24 楼 qq_28163175 的回复:
谢谢大家的帮助,昨晚上想了一想总算想明白了,之前是我走入了一个误区,将server.accept()返回的socket当成是客户端那边的socket得了,其实客户端那边的socket是属于客户端的,而对应的服务器也要有一个socket与连接的客户端相对应,服务器就好比一个大的蓄水池,要往很多小水池(客户端)输水,那么大蓄水池就要针对每个小蓄水池开一个口用于输水。这是昨晚上帮助理解后画的图 再次感谢楼上几位大哥的帮助,谢谢!!



其实这个图的理解还是有点问题的,下图是我说的意思


xtu0027 2016-03-05
  • 打赏
  • 举报
回复
这个似乎很难理解啊
飞蛾扑火112 2016-03-05
  • 打赏
  • 举报
回复
客户端和服务器就是一个水管的两头,水可以从一个口流到另一口,随便流,当水从服务器流向客户端的时候,这时候就是水.getOutputStream(),反流也同样啊
自傷無色丶 2016-03-05
  • 打赏
  • 举报
回复
谢谢大家的帮助,昨晚上想了一想总算想明白了,之前是我走入了一个误区,将server.accept()返回的socket当成是客户端那边的socket得了,其实客户端那边的socket是属于客户端的,而对应的服务器也要有一个socket与连接的客户端相对应,服务器就好比一个大的蓄水池,要往很多小水池(客户端)输水,那么大蓄水池就要针对每个小蓄水池开一个口用于输水。这是昨晚上帮助理解后画的图 再次感谢楼上几位大哥的帮助,谢谢!!
小圣_fighting 2016-03-05
  • 打赏
  • 举报
回复
6666,学习了
cjx6600115 2016-03-04
  • 打赏
  • 举报
回复
引用 7 楼 qq_28163175 的回复:
引用 6 楼 cjx6600115 的回复:
根据你的代码判断你现在构建的是服务器端,OutputStream是输出流,你的意图是写东西到客户端,当然是用OutputStream,而InputStream是输入流,是从客户端读取信息的,还有就是你不要把你所定义的Client理解为客户端,你在这段代码中所构建的Socket只是服务器端的其中一个端口,并不是客户端,所以Client.getOutputStream是相对于服务器端来说的,就是说拿到服务器端的输出流,我个人是这样理解的,说的不对的望大神指教.
可是我看书上说的accept返回的socket代表一个客户端啊
你理解的确实没错,accept返回的socket是代表一个客户端,可是它只是服务器端的其中一个接口,就是水管的其中一个出口,另一个出口在客户端那边呢,书上可能没有告诉你编程的时候都是服务器端跟客户端一起来构建的,它们很多东西都是要成对的,并不是像你这样构建了一边,没有另一边.
cjx6600115 2016-03-04
  • 打赏
  • 举报
回复
引用 12 楼 cjx6600115 的回复:
引用 8 楼 qq_28163175 的回复:
[quote=引用 6 楼 cjx6600115 的回复:] 根据你的代码判断你现在构建的是服务器端,OutputStream是输出流,你的意图是写东西到客户端,当然是用OutputStream,而InputStream是输入流,是从客户端读取信息的,还有就是你不要把你所定义的Client理解为客户端,你在这段代码中所构建的Socket只是服务器端的其中一个端口,并不是客户端,所以Client.getOutputStream是相对于服务器端来说的,就是说拿到服务器端的输出流,我个人是这样理解的,说的不对的望大神指教.
你好 我就是这里不明白啊 inputstream为什么是从客户端读呢?我的理解是流t就像一根水管对着客户端,那么input就应该是往客户端写东西啊
你就把它想成一根水管,output是水往外流,input是水往自己这边流,它们是成对存在的,有output就必有input,有input就必有output.[/quote] 或者你直接按字面意思理解吧,out就是出去,就是发送出去,in就是进来,就是读进来.
cjx6600115 2016-03-04
  • 打赏
  • 举报
回复
引用 8 楼 qq_28163175 的回复:
引用 6 楼 cjx6600115 的回复:
根据你的代码判断你现在构建的是服务器端,OutputStream是输出流,你的意图是写东西到客户端,当然是用OutputStream,而InputStream是输入流,是从客户端读取信息的,还有就是你不要把你所定义的Client理解为客户端,你在这段代码中所构建的Socket只是服务器端的其中一个端口,并不是客户端,所以Client.getOutputStream是相对于服务器端来说的,就是说拿到服务器端的输出流,我个人是这样理解的,说的不对的望大神指教.
你好 我就是这里不明白啊 inputstream为什么是从客户端读呢?我的理解是流t就像一根水管对着客户端,那么input就应该是往客户端写东西啊
你就把它想成一根水管,output是水往外流,input是水往自己这边流,它们是成对存在的,有output就必有input,有input就必有output.
自傷無色丶 2016-03-04
  • 打赏
  • 举报
回复
引用 14 楼 cjx6600115 的回复:
引用 7 楼 qq_28163175 的回复:
[quote=引用 6 楼 cjx6600115 的回复:] 根据你的代码判断你现在构建的是服务器端,OutputStream是输出流,你的意图是写东西到客户端,当然是用OutputStream,而InputStream是输入流,是从客户端读取信息的,还有就是你不要把你所定义的Client理解为客户端,你在这段代码中所构建的Socket只是服务器端的其中一个端口,并不是客户端,所以Client.getOutputStream是相对于服务器端来说的,就是说拿到服务器端的输出流,我个人是这样理解的,说的不对的望大神指教.
可是我看书上说的accept返回的socket代表一个客户端啊
你理解的确实没错,accept返回的socket是代表一个客户端,可是它只是服务器端的其中一个接口,就是水管的其中一个出口,另一个出口在客户端那边呢,书上可能没有告诉你编程的时候都是服务器端跟客户端一起来构建的,它们很多东西都是要成对的,并不是像你这样构建了一边,没有另一边.[/quote]你好,其实前面学习io流的时候也还能理解,就是这里用到socket上面就懵逼了,那个client.getoutputstream()之后调用的out.println(str)就是代表将数据输出到 客户端吗?我的理解是服务端向客户端传输数据,那么服务端就是out,向客户端写数据,对于客户端就要使用input来读取,所以应该out=new printstream(client.getinputstream())这么写。哪里错了吗?求大神指点
自傷無色丶 2016-03-04
  • 打赏
  • 举报
回复
引用 15 楼 skgary 的回复:
[quote=引用 楼主 qq_28163175 的回复:] 新人求问out=new printstream(client.getoutputstream())这里为什么不是client.getinputstream,对服务端是输出,但对于客户端是输入啊,不知道哪里理解错了,求大神指点
纠正你一个最最基本的认知。 从TCP的角度来说,TCP连接是全双工的通信 ,在连接建立以后,服务器和客户端从TCP连接的角度来说没有任何的区别!!服务器可以向客户端发数据,客户端也可以向服务器发数据。所以,无论是客户端,还是服务器端的socket,都有自己的OutputStream,InputStream。不存在服务端是输出,客户端是输入这个概念。拿最基本的http请求来说,客户端连上来,首先是客户端向服务器请求页面,这个阶段,服务器从客户端的读取请求的页面地址;然后再向客户端返回内容,这时客户端才是从inputstream里读内容。 至于为什么叫服务器端,那是在连接建立之前,服务器端是等着客户端连上来的。所以,服务器端的代码一般是new 一个socket,然后等客户端,accept一个 socket出来。而客户端则是new一个到服务器端的连接。[/quote]你好,其实前面学习io流的时候也还能理解,就是这里用到socket上面就懵逼了,那个client.getoutputstream()之后调用的out.println(str)就是代表将数据输出到 客户端吗?我的理解是服务端向客户端传输数据,那么服务端就是out,向客户端写数据,对于客户端就要使用input来读取,所以应该out=new printstream(client.getinputstream())这么写。哪里错了吗?求大神指点
oh_Maxy 2016-03-04
  • 打赏
  • 举报
回复
关于输入输出流的命名,我觉得你可以在上面这些说法里找一套感觉合理的解释,然后记下来就行了,没必要纠结其“人文关怀”之类的东西。IO流是java大佬设计的,已经这样了,也能实现我们的目标,我们要做的就是记下来,别用错了即可。
jay881101 2016-03-04
  • 打赏
  • 举报
回复
output-把内存里读出来(打印机,页面) input-把外部内容(一个文件,一个报文流)读到内存来
daishaodong 2016-03-04
  • 打赏
  • 举报
回复
引用教程的:‘客户端的Socket对象的getInputStream()方法得到的输入流其实就是从服务器端发回的数据流’ 那么,服务器上 的Socket对象的getInputStream()方法得到的输入流其实就是从客户端发回的数据流
skgary 2016-03-04
  • 打赏
  • 举报
回复
引用 楼主 qq_28163175 的回复:
新人求问out=new printstream(client.getoutputstream())这里为什么不是client.getinputstream,对服务端是输出,但对于客户端是输入啊,不知道哪里理解错了,求大神指点
纠正你一个最最基本的认知。 从TCP的角度来说,TCP连接是全双工的通信 ,在连接建立以后,服务器和客户端从TCP连接的角度来说没有任何的区别!!服务器可以向客户端发数据,客户端也可以向服务器发数据。所以,无论是客户端,还是服务器端的socket,都有自己的OutputStream,InputStream。不存在服务端是输出,客户端是输入这个概念。拿最基本的http请求来说,客户端连上来,首先是客户端向服务器请求页面,这个阶段,服务器从客户端的读取请求的页面地址;然后再向客户端返回内容,这时客户端才是从inputstream里读内容。 至于为什么叫服务器端,那是在连接建立之前,服务器端是等着客户端连上来的。所以,服务器端的代码一般是new 一个socket,然后等客户端,accept一个 socket出来。而客户端则是new一个到服务器端的连接。
我说假如 2016-03-04
  • 打赏
  • 举报
回复
有道理
大石斑Grouper 2016-03-03
  • 打赏
  • 举报
回复
也是为了方便理解吧。毕竟有时候从output拿东西有点怪怪的,容易弄错。你可以理解为客户端发出去的socket和服务端拿到的socket不是同一个socket。这个过程进行了镜像处理......我的理解。有不对的地方请高手们指教。
大石斑Grouper 2016-03-03
  • 打赏
  • 举报
回复
它有点像镜子,你看镜子是不是反的?JAVA的NET包里面的机制已经帮我们处理过了。
自傷無色丶 2016-03-03
  • 打赏
  • 举报
回复
引用 5 楼 a34140974 的回复:
outputstream和inputstream是相对而言的,这里需要从client把数据拿出来,对于client来讲就是out
你好 这里好像是往客户端输东西吧
加载更多回复(8)

62,612

社区成员

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

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