c 获得java数据,从C ++套接字读取Java中的数据

I wrote this program, but it never reaches line b. I am sure the loop is completing. Does anyone know what is wrong? :D thanks

while((x = inr.read(chars, 0, chars.length)) != -1){

result += String.valueOf(chars[0]);

Log.d("@@@", "a " + result); // line a

};

Log.d("@@@", "a " + result); // line b

Output

05-31 10:18:20.249: D/@@@(676): Starting iMNSConnection...

05-31 10:18:20.249: D/@@@(676): Is trying to connect to server...

05-31 10:18:20.289: D/@@@(676): a W

05-31 10:18:20.289: D/@@@(676): a We

05-31 10:18:20.289: D/@@@(676): a Wel

05-31 10:18:20.289: D/@@@(676): a Welc

05-31 10:18:20.289: D/@@@(676): a Welco

05-31 10:18:20.294: D/@@@(676): a Welcom

05-31 10:18:20.294: D/@@@(676): a Welcome

05-31 10:18:20.294: D/@@@(676): a Welcome

05-31 10:18:20.294: D/@@@(676): a Welcome !

05-31 10:18:20.294: D/@@@(676): a Welcome !!

05-31 10:18:20.294: D/@@@(676): a Welcome !!!

05-31 10:18:20.299: D/dalvikvm(676): GC_CONCURRENT freed 1196K, 36% free 16727K/25991K, paused 1ms+2ms, total 15ms

05-31 10:18:20.299: D/dalvikvm(676): WAIT_FOR_CONCURRENT_GC blocked 13ms

Edited

Actuall I am using a C++ Server with Java client

C++ side

char* classroomList = "{........}";

send(ConnectedSocket, classroomList, strlen(classrooomList), 0);

Then the client silde (Java)

If I use BufferedReader and Print out nothing.

So I use this,

InputStreamReader inr = new InputStreamReader(ins);

char[] chars = new char[1024];

while((x = inr.read(chars, 0, chars.length - 1)) != -1){

result += String.valueOf(chars);

}

The Output like this:

05-31 10:47:32.464: D/@@@(14850): Is trying to connect to server...

05-31 10:47:32.494: D/@@@(14850): 11a Welcome !!!������...(and 2028 same characters)

So I try to add this

while((x = inr.read(chars, 0, chars.length - 1)) != -1){

chars[x] = '\0';

result += String.valueOf(chars);

Log.d("@@@", x + "a " + result);

}

This one work when Java end data to C++ server. I do this on C++ but not work on Java

Finally I try this,

while((x = inr.read(chars, 0, chars.length - 1)) != -1){

chars[x] = '\0';

result += String.valueOf(chars);

Log.d("@@@", x + "a " + result);

}

Or using StringBuilder dont work too.

After follow SM work,

Log.d("@@@", "Waiting for server reply...");

InputStream in = socket.getInputStream();

InputStreamReader inr = new InputStreamReader(in);

BufferedReader br = new BufferedReader(inr);

StringBuilder sb = new StringBuilder();

String line;

while ((line = br.readLine()) != null) {

Log.d("@@@", ": " + line);

sb.append(line);

}

br.close();

Log.d("@@@", ": " + sb.toString());

The output dont not pass thr the while loop

05-31 11:04:37.734: D/dalvikvm(22624): GC_FOR_ALLOC freed 1621K, 39% free 15950K/25991K, paused 18ms, total 18ms

05-31 11:04:37.749: D/@@@(22624): Starting iMNSConnection...

05-31 11:04:37.749: D/@@@(22624): Is trying to connect to server...

05-31 11:04:37.759: D/@@@(22624): Waiting for server reply...

05-31 11:04:37.789: D/dalvikvm(22624): GC_CONCURRENT freed 1194K, 36% free 16744K/25991K, paused 1ms+1ms, total 13ms

05-31 11:04:37.789: D/dalvikvm(22624): WAIT_FOR_CONCURRENT_GC blocked 12ms

05-31 11:04:37.809: D/AbsListView(22624): Get MotionRecognitionManager

05-31 11:04:37.819: D/SensorManager(22624): unregisterListener:: Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41d85420

05-31 11:04:37.819: D/Sensors(22624): Remain listener = Sending .. normal delay 200ms

05-31 11:04:37.819: I/Sensors(22624): sendDelay --- 200000000

05-31 11:04:37.819: D/SensorManager(22624): JNI - sendDelay

05-31 11:04:37.819: I/SensorManager(22624): Set normal delay = true

05-31 11:05:41.944: D/dalvikvm(22624): GC_CONCURRENT freed 1078K, 33% free 17590K/25991K, paused 21ms+20ms, total 82ms

解决方案

Who produces the text Welcome !!!? Maybe the other side doesn't close the stream.

In any case, your code is very ineffective. You are creating many String objects, one per each character read. If you are reading text from stream, you'd better use something like:

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

StringBuilder sb = new StringBuilder();

String line;

while ((line = br.readLine()) != null) {

sb.append(line);

}

br.close(); // and catch exception

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值