socket readline,阻塞

来源:互联网 发布:java程序员的发展 编辑:程序博客网 时间:2024/06/16 07:38

转载:http://haohaoxuexi.iteye.com/blog/1979837

我修改了部分,因为我感觉原作者的我用到自己里面是不行的,只是加了个“/n”

service:

@Overridepublic void run() {String line = null;InputStream input;OutputStream output;String str = "abc";int len;int index;StringBuffer sb = new StringBuffer();try {ac = new ClassPathXmlApplicationContext("applicationContext.xml");metterServic = (MetterService) ac.getBean("metterServiceImpl");input = socket.getInputStream(); // 获取到输入的Reader reader = new InputStreamReader(socket.getInputStream());char chars[] = new char[25];while ((len = reader.read(chars)) != -1) {line = new String(chars, 0, len);if ((index = line.indexOf("eof")) != -1) {sb.append(line.substring(0, index));break;}sb.append(line);}System.out.println("from client: " + sb);// 读完后写一句Writer writer = new OutputStreamWriter(socket.getOutputStream());writer.write(str);writer.flush();writer.close();reader.close();input.close();socket.close();} catch (IOException e) {e.printStackTrace();}}

android 客户端:

 @Override        public void run() {            final Bundle bundle = new Bundle();            bundle.clear();            //连接服务器 并设置连接超时为5秒            socket = new Socket();            //定义消息            final Message msg = new Message();            msg.what = 0x11;            //第一个参数address表示主机的IP地址            try {                socket.connect(new InetSocketAddress("113.71.190.204", 30000), 5000);                Log.e("测试", "连接成功!");                ip_addr = socketNet.getLocalIpAddress(context);                //建立连接后就可以往服务端写数据了                Writer writer = new OutputStreamWriter(socket.getOutputStream());                writer.write("Hello Server.");                writer.write(ip_addr + "eof\n");                writer.flush();                //写完以后进行读操作                Reader reader = new InputStreamReader(socket.getInputStream());                char chars[] = new char[64];                int len;                StringBuffer sb = new StringBuffer();                String temp;                int index;                while ((len = reader.read(chars)) != -1) {                    temp = new String(chars, 0, len);                    if ((index = temp.indexOf("eof")) != -1) {                        sb.append(temp.substring(0, index));                        break;                    }                    sb.append(new String(chars, 0, len));                }                System.out.println("from server: " + sb);                bundle.putString("msg", sb.toString());                Log.e("收到的数据是:", sb.toString());                msg.setData(bundle);                //发送消息 修改UI线程中的组件                myHandler.sendMessage(msg);                //关闭各种输入输出流                writer.close();                reader.close();                socket.close();            } catch (IOException e) {                //连接超时 在UI界面显示消息                Log.e("报错", Log.getStackTraceString(e));                bundle.putString("msg", "服务器连接失败!请检查网络是否打开");                msg.setData(bundle);                //发送消息 修改UI线程中的组件                myHandler.sendMessage(msg);            }        }


0 0