A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬 中级黑马   /  2012-8-20 05:51  /  6336 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李敬 于 2012-8-20 05:55 编辑

网络编程知识点中的代码
import java.io.*;
import java.net.*;

class  TextClient
{
        public static void main(String[] args) throws Exception
        {
                Socket s = new Socket("192.168.1.254",10006);
                BufferedReader bufr =
                        new BufferedReader(new FileReader("IPDemo.java"));
                PrintWriter out = new PrintWriter(s.getOutputStream(),true);
                String line = null;
                while((line=bufr.readLine())!=null)//A---在这里如果没有了数据会阻塞
                {
                        out.println(line);
                }
                s.shutdownOutput();//B---所以要关闭客户端的输出流。相当于给流中加入一个结束标记-1.
                BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
                String str = bufIn.readLine();
                System.out.println(str);
                bufr.close();
                s.close();
        }
}
class  TextServer
{
        public static void main(String[] args) throws Exception
        {
                ServerSocket ss = new ServerSocket(10006);
                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip+"....connected");
                BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
                PrintWriter out  = new PrintWriter(new FileWriter("server.txt"),true);
                String line = null;
                while((line=bufIn.readLine())!=null)//C---这里也会阻塞
                {
                        out.println(line);
                }
                PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
                pw.println("上传成功");
                out.close();
                s.close();
                ss.close();

        }
}

我的问题就是
socket这种方式中的readLine没有数据时会阻塞
我们之前写的本地的文本复制程序中,readLine没有数据不会阻塞.
这有什么区别吗?



评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
本帖最后由 刘圣伟 于 2012-8-20 06:55 编辑

socket这种方式中的readLine没有数据时会阻塞
我们之前写的本地的文本复制程序中,readLine没有数据不会阻塞.
这有什么区别吗?

readline()方法阻塞的意思是,一直等带数据的输入。没有数据输入就一直等待。直到有数据输入的时候,就读了。

而文本复制中,readline也是一样的。
判断的条件是不为空的时候,文件中有内容,就一直读,,没有就是null,
所有循环结束。
其实主要是网络中,它阻塞是因为没有数据源传过来
而,文件中,已经有源了,只要读就好了

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马