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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵亚威 于 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()阻塞方法 当输入中文时 无法返回 会卡屏或者卡死 这是神马情况

1 个回复

正序浏览
ReadLine()是你输入一个东西后会换行.而Read()不会,要输入什么样的类型是由自己定义的.

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