黑马程序员技术交流社区

标题: read()和 readLine()以及write()阻塞方法出现了问题还是其他问题 [打印本页]

作者: 赵亚威    时间: 2013-4-2 21:37
标题: read()和 readLine()以及write()阻塞方法出现了问题还是其他问题
本帖最后由 赵亚威 于 2013-4-3 18:58 编辑

package excercise;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class SocketTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Socket s=null;
    try {
                s=new Socket("127.0.0.1",10000);
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            //BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
            BufferedReader bwIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
             String line=null;
             while((line=br.readLine())!=null){
                     if("over".equals(line))
                             break;
                     pw.println(line);
                     String str=bwIn.readLine();
                     System.out.println(str);
             }
                     
        } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }finally{
                try {
                        s.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
        }
        }

}
class SocketServer{
        public static void main(String[] args){
                ServerSocket ss=null;
                Socket s=null;
                try {
                        ss=new ServerSocket(10000);
                        s=ss.accept();
                        String ip=s.getInetAddress().getHostAddress();
                        System.out.println("ip:"+ip);
                        BufferedReader bwIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
                        //BufferedWriter bwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
                        String line=null;
                        while((line=bwIn.readLine())!=null){
                                pw.println(line.toUpperCase());

                                //System.out.println();
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }finally{
                        try {
                                 
                                ss.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        try {
                                s.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }
}
read()和readLine()以及write()阻塞方法 当输入中文时 无法返回 会卡屏或者卡死 这是神马情况
作者: lucy198921    时间: 2013-4-2 21:57
ReadLine()是你输入一个东西后会换行.而Read()不会,要输入什么样的类型是由自己定义的.

write之后flush了吗?有的时候你写入的东西太短,socket会做缓冲的,flush会强制将缓冲的字节发送出去。
还有如果你用readLine读数据,记得给你用write发出去的内容里添加一个'\n',要不readLine是会lock在readLine里面的,直到读取到一个'\n'才会返回。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2