普通网友 2015-07-02 01:26 采纳率: 19%
浏览 1589

android下socket通信的问题

直接上代码:

 public class SocThread extends Thread{
    private String ip = "211.100.96.**";
    private int port = 8006;
    public Socket client = null;
    PrintWriter out;
    BufferedReader in;
    String tmprecvbuf="";
    String recvbuf="";
    String tmpsendbuf="0<DOC SBH=\"NL130110095C\" BBH=\"1.0.0.0\" CZYID=\"30014\" DOCID=\"201\">"+
            "<XTTB><YHYZ><KH></KH><YHM>46346678</YHM><MM>888888</MM></YHYZ><CXXTGX><CXBBH>96</CXBBH>"+
            "<SJBBH>54</SJBBH><XTBBH>3.0.7</XTBBH><ICMYBBH>3</ICMYBBH></CXXTGX><HD><QHD>0</QHD></HD></XTTB></DOC>\0";

    public void conn() {
        try{
            client = new Socket(ip, port);
            client.setSoTimeout(5000);
            if(client.isConnected()) 
                Log.i("444","socket is connected!");
            else {
                Log.i("444","socket is NOT connected!");
            }
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
        }catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        conn();
        try{
            out.println(tmpsendbuf.length());
            Log.i("555","len of sendbuf:"+tmpsendbuf.length());
            out.println(tmpsendbuf);

            int i=0;
            long time_start=System.currentTimeMillis();
            Log.i("555","System.currentTimeMillis-time_start:"+(System.currentTimeMillis()-time_start));
            while((System.currentTimeMillis()-time_start)<(long)10000){
                Log.i("555",String.valueOf(i++));
                tmprecvbuf = in.readLine();
                if (tmprecvbuf != null) {
                    Log.i("555"," len=" + tmprecvbuf.length());
                    recvbuf+=tmprecvbuf;
                }
            }
            if(recvbuf!=null)
                Log.i("555", recvbuf);
        } catch (UnknownHostException e1){
            e1.printStackTrace();
        } catch (IOException e1) {  
            e1.printStackTrace();  
        }  catch (Exception e) {
            e.printStackTrace();
        }finally {  
            try {  
                client.close();  
                Log.i("555", "client is closed.");
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  

    }
}

问题来啦:
进while循环以后一直是收不到任何东西。。。有一些警告信息帖在下面:
图片说明

调用就两行,调用应该没什么问题:
Thread cThread=new SocThread();
cThread.start();

  • 写回答

2条回答 默认 最新

  • 数字改变世界 2015-07-02 02:07
    关注

    个人理解:首先,tcp通信属于长连接,没必要设置超时,你的logcat打印是socket超时,说明你的客户端在5s内没有收到消息,dalvikvm挂了

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)