如何使用socket编程测量Android的数据包丢失? [英] How to measure Packet loss in Android using socket programming?

查看:164
本文介绍了如何使用socket编程测量Android的数据包丢失?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发的Andr​​oid应用程序,我需要从服务器通信,而我做了套接字编程的帮助,现在我需要找到丢包率在我的连接,因此没有任何 API 或任何方式找到socket编程数据包丢失。

我附上从哪里接到来自服务器的消息客户端我的code片段。

  {尝试
        插座=新的Socket(dstAddress,dstPort);
        DataOutputStream类=新DataOutputStream类(
                socket.getOutputStream());
        DataInputStream以=新DataInputStream所(socket.getInputStream());
        dataOutputStream.writeUTF(名);
        dataOutputStream.flush();         字符串myArray的=;
         INT I = 0;
        而(!goOut){
            标志= 0;
            如果(dataInputStream.available()大于0){
                MSGLOG + = dataInputStream.readUTF();
                标志= 1;
                MainActivity.this.runOnUiThread(新的Runnable(){                    @覆盖
                    公共无效的run(){
                        chatMsg.setText(MSGLOG);
                    }
                });            Log.d(DERE,MSGLOG);                 myArray的= MSGLOG +;
              Log.v(有,myArray的);
            }
            //Log.v(\"ARE,myArray的[0]);
            如果(标志== 1)
            收到(myarray的);            如果(!msgToSend.equals()){
                dataOutputStream.writeUTF(msgToSend);
                dataOutputStream.flush();
                msgToSend =;
            }
        }
        //Looper.loop();    }赶上(UnknownHostException异常五){
        e.printStackTrace();
        最后弦乐为EString = e.toString();
        MainActivity.this.runOnUiThread(新的Runnable(){            @覆盖
            公共无效的run(){
                Toast.makeText(MainActivity.this,为EString,Toast.LENGTH_LONG).show();
            }        });


解决方案

检查低于code。

 公共无效平()
{
字符串结果= NULL;
   INT pingCount = 5;
   的String [] = rttPacket新的String [3];
   的String [] =丢包新的String [1];
    尝试{
        // URL =192.168.4.31;
        字符串pingCmd =平-c+ pingCount ++ URL; // URL; //
        串pingResult =;
        运行R =调用Runtime.getRuntime();
        进程p = r.exec(pingCmd);
        在的BufferedReader =新的BufferedReader(新的InputStreamReader(
            p.getInputStream()));
        串inputLine;
        而((inputLine = in.readLine())!= NULL){
            pingResult + = inputLine;
        }
        附寄();
        ProcessSyncResponse(pingResult,URL);
    }
   }公共字符串ProcessSyncResponse(字符串pingResult,字符串URL){
    字符串pingdataResult = NULL;
    尝试{
        INT索引2 = pingResult.indexOf(%丢包);
        INT索引1 = pingResult.indexOf(RTT最小/平均/最大/ MDEV =);
        如果(索引1大于0){
            字符串parsedTime =(pingResult.substring(索引1 + 23));
            rttPacket = parsedTime.split(/);
        }其他{
            rttPacket [0] =0;
            rttPacket [1] =0;
            rttPacket [2] =0;
        }
        如果(索引2大于0){
            串parsedPacket =;
            INT finalIndex =索引2 + -3;
            字符串parsedintitalIndex = pingResult.substring(finalIndex,
                    索引2);
            parsedintitalIndex = parsedintitalIndex.replaceAll(
                    (,)|(,,)|(),);            parsedPacket + = parsedintitalIndex;
            parsedPacket + =(pingResult.substring(索引2));
            丢包= parsedPacket.split(%);        }其他{
            丢包[0] =0;
        }
    }赶上(例外五){
        e.printStackTrace();
    }
}
log.v(TAG,丢包%+丢包[0]);
log.v(TAG,丢包AVG+ rttPacket [0]);
log.v(TAG,丢包最小+ rttPacket [1]);
log.v(TAG,丢包最大+ rttPacket [2]);

很高兴,如果它为你工作。

I am developing an application for android where i need to communicate from server and i did that with the help of socket programming, now i need to find Packet Loss in my connection, so is there any API or any way to find Packet Loss in socket programming.

I am attaching my code snippet where client received message from server.

  try {
        socket = new Socket(dstAddress, dstPort);
        dataOutputStream = new DataOutputStream(
                socket.getOutputStream());
        dataInputStream = new DataInputStream(socket.getInputStream());
        dataOutputStream.writeUTF(name);
        dataOutputStream.flush();

         String myArray = "";
         int i=0;
        while (!goOut) {
            flag=0;
            if (dataInputStream.available() > 0) {
                msgLog += dataInputStream.readUTF();
                flag=1; 
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        chatMsg.setText(msgLog);
                    }
                });

            Log.d("DERE", msgLog);

                 myArray=msgLog+"";   
              Log.v("ARE", myArray);
            }
            //Log.v("ARE", myArray[0]);
            if(flag==1)
            received(myArray);

            if(!msgToSend.equals("")){
                dataOutputStream.writeUTF(msgToSend);
                dataOutputStream.flush();
                msgToSend = "";
            }
        }
        //Looper.loop();

    } catch (UnknownHostException e) {
        e.printStackTrace();
        final String eString = e.toString();
        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(MainActivity.this, eString, Toast.LENGTH_LONG).show();
            }

        });

解决方案

Check below code.

public void ping()
{
String result = null;
   int pingCount=5;
   String[] rttPacket = new String[3];
   String[] packetLoss= new String[1];
    try {
        // url = "192.168.4.31";
        String pingCmd = "ping -c " + pingCount + " " + url;// url;//
        String pingResult = "";
        Runtime r = Runtime.getRuntime();
        Process p = r.exec(pingCmd);
        BufferedReader in = new BufferedReader(new InputStreamReader(
            p.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            pingResult += inputLine;
        }
        in.close();
        ProcessSyncResponse(pingResult, url);
    }
   }    public String ProcessSyncResponse(String pingResult, String url) {
    String pingdataResult = null;
    try {
        int index2 = pingResult.indexOf("% packet loss");
        int index1 = pingResult.indexOf("rtt min/avg/max/mdev =");
        if (index1 > 0) {
            String parsedTime = (pingResult.substring(index1 + 23));
            rttPacket = parsedTime.split("/");
        } else {
            rttPacket[0] = "0";
            rttPacket[1] = "0";
            rttPacket[2] = "0";
        }
        if (index2 > 0) {
            String parsedPacket = "";
            int finalIndex = index2 + -3;
            String parsedintitalIndex = pingResult.substring(finalIndex,
                    index2);
            parsedintitalIndex = parsedintitalIndex.replaceAll(
                    "(,)|(,,)|( )", "");

            parsedPacket += parsedintitalIndex;
            parsedPacket += (pingResult.substring(index2));
            packetLoss = parsedPacket.split("%");

        } else {
            packetLoss[0] = "0";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
log.v(TAG," Packet Loss in %" +packetLoss[0]]);
log.v(TAG," Packet Loss AVG" +rttPacket[0]]);
log.v(TAG," Packet Loss Min" +rttPacket[1]]);
log.v(TAG," Packet Loss Max" +rttPacket[2]]); 

Glad if it worked for you.

这篇关于如何使用socket编程测量Android的数据包丢失?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆