![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
java网络编程的问题,A,B通过socket连接起来········
java网络编程的问题,A,B通过socket连接起来了,当A使用PrintWriter.println()发送信息后,B则用BufferedReader.readLin...
java网络编程的问题,A,B通过socket连接起来了,当A使用PrintWriter.println()发送信息后,B则用BufferedReader.readLine()读取。问题是:在A使用println()到B使用readLine()的这段时间里,A用println发送的信息到哪里去了,是还没有发送出去(只发送了传送信息的请求),还是已经发送到了B的电脑,只是B还未使用
展开
5个回答
展开全部
socket 就是把服务器与客户端打通了一条通道,一般情况下,你肯定会在两边分别创建一个输入流和输出流,输入流用来接收,输出流用来发送,比如从客户端的角度来说,当你服务器端PrintWriter.println()写了之后,等于是写入了客户端的BufferedReader。
追问
首先谢谢各位大虾
A println()后,B便收到的A的信息,并且将信息存于B的 InputStream 对象(流)中,随着A发的信息越来越多,B的 InputStream 对象就越来越大,而过滤流 BufferedReader 只是读B.InputStream流中的信息,是这样吗?意思就是println后,B便收到信息,管你什么时候read ?
追答
输出之后,是写入了对方的缓存中,而BufferedReader 读的时候,是从缓存中读取的,从某种程度上来说,确实是一旦发送之后,就等于发送到对方的机子上了。
展开全部
java内置的处理器里了!
追问
两台电脑
追答
java软件的内部环境里!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个人感觉应该是发送出去了
追问
我想也是
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在socket流里面
你就把他想象成一个盒子
a用println()把东西放在socket盒子里
b用read读取socket盒子里的东西
建议你把要发的东西封装一下
然后发送 以防乱码
你就把他想象成一个盒子
a用println()把东西放在socket盒子里
b用read读取socket盒子里的东西
建议你把要发的东西封装一下
然后发送 以防乱码
更多追问追答
追问
那个盒子是用来帮助记忆,学习的啊,我是想问这盒子的背后到底发生了什么。反应到 电脑A + 一根线 + 电脑B 上来,println()后的事情
追答
应该是直接发到了b电脑的socket缓冲区里
谁来负责管理缓冲区?
对于使用socket接口和传输协议层交流的应用程序来说,AFD.SYS负责缓冲区的管理。也就是说,当一个程序调用send或WSASend函数发送数据的时候,数据被复制到AFD.SYS的内部缓冲里(大小根据SO_SNDBUF设置),然后send和WSASend立刻返回。之后数据由AFD.SYS负责发送到网络上,与应用程序无关。当然,如果应用程序希望发送比SO_SNDBUF设置的缓冲区还大的数据,WSASend函数将会被堵塞,直到所有数据均被发送完毕为止。
同样,当从远地客户端接受数据的时候,如果应用程序没有提交receive请求,而且线上数据没有超出SO_RCVBUF设置的缓冲大小,那么AFD.SYS就把网络上的数据复制到自己的内部缓冲保存。当应用程序调用recv或WSARecv函数的时候,数据即从AFD.SYS的缓冲复制到应用程序提供的缓冲区里
参照 http://hi.baidu.com/huzhifeng/blog/item/ff1fb27e9539c1380cd7daa2.html
这些东西都涉及到底层实现的东西 建议可以看看《计算机网络》
其实我也不是很懂 欢迎交流
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询