采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
Client.java
Server.java
你这里的代码有一定的错误。
客户端部分,对于println方法是一个输出方法,此时的writer是socket链接的流,所以进行该方法调用时会直接将文字发送给Socket的流进行处理,这个地方基本不阻塞,但是并不代表他不是阻塞方法,他会等待将数据发送给缓冲区后就继续往下走。
对于服务器部分,你的Syste.in.read() 方法无需调用的哈,因为该方法的调用会进入控制台的流等待状态,而不能得到客户端发送过来的数据,可以将改行去掉。
第一,客户端调用了flush,是不是数据就已经通过socket发送到网络上了? 第二,服务器之所以system.in.read,我是想服务器端暂时不能read,正好可以观察客户端的write是不是阻塞的
flush并不代表数据发送到网上了,可能数据在客户端的网络缓冲层,也可能在服务器的网络缓冲层;这个部分是不会阻塞的,除非把缓冲区占满了后才会开始阻塞。 部分机器的网络层甚至还是共享的,也就是A进程发送的数据把缓冲区占满后,B进程也将无法正常进行网络输出。 这个体现在某个进程可能发送大量垃圾数据占满,然后导致浏览器无法访问界面等情况。
登录后可查看更多问答,登录/注册
理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选
2.7k 1
1.8k 7
1.6k 5
1.9k 13
1.0k 13