Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从C++;插座_Java_C++_Sockets_While Loop_Inputstream - Fatal编程技术网

Java 从C++;插座

Java 从C++;插座,java,c++,sockets,while-loop,inputstream,Java,C++,Sockets,While Loop,Inputstream,我写了这个程序,但它从未到达行b。我确信循环正在完成。有人知道怎么回事吗D谢谢 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 输出 05-31 10:18:20.249: D/@@@(6

我写了这个程序,但它从未到达
行b
。我确信循环正在完成。有人知道怎么回事吗D谢谢

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
输出

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
编辑

<我使用的是一个带有java客户端/p>的C++服务器 C++端

char* classroomList = "{........}";
send(ConnectedSocket, classroomList, strlen(classrooomList), 0);
然后是客户端silde(Java) 如果我使用BufferedReader,什么也不打印。 所以我用这个

InputStreamReader inr = new InputStreamReader(ins);
char[] chars = new char[1024];
while((x = inr.read(chars, 0, chars.length - 1)) != -1){
    result += String.valueOf(chars);
}
输出如下所示:

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)
所以我试着加上这个

while((x = inr.read(chars, 0, chars.length - 1)) != -1){
    chars[x] = '\0';
    result += String.valueOf(chars);
    Log.d("@@@", x + "a " + result);
}

此java端数据工作到C++服务器。我在C++上这样做,但不工作在java < /p> 最后我试了一下

while((x = inr.read(chars, 0, chars.length - 1)) != -1){
    chars[x] = '\0';
    result += String.valueOf(chars);
    Log.d("@@@", x + "a " + result);
}
或者使用StringBuilder也不起作用

在跟踪SM工作之后

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());
输出不通过while循环

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

谁制作文本
欢迎?也许另一边没有关闭小溪

在任何情况下,您的代码都是非常无效的。您正在创建许多字符串对象,每个读取的字符一个。如果您正在从流中读取文本,则最好使用以下内容:

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

谁制作文本
欢迎?也许另一边没有关闭小溪

在任何情况下,您的代码都是非常无效的。您正在创建许多字符串对象,每个读取的字符一个。如果您正在从流中读取文本,则最好使用以下内容:

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

Java字符串不是以null结尾的。如果将
x
字节接收到
byte[]
buffer
buffer
,则从中构造字符串的正确方法是
newstring(buffer,0,x)

x>代码>字节接收到<代码>字节[]/COD>缓冲区<代码>缓冲区< /代码>,从它构造字符串的正确方法是<代码>新字符串(缓冲区,0,x)< /> > .<服务器>是服务器端用C++编写的,我可以使用BuffErdRead读取套接字。我什么都看不懂。我同意@sm4。客户端似乎没有关闭套接字。您可以通过发出命令“telnet”,键入一些东西,然后点击CTRL-结束,这样使用telnet进行测试。因此,您可以控制C++输出吗?尝试发送一些新行,看看bufferred读取器是否读取了任何内容。我认为问题可能出在服务器端。但绝对不要在循环中使用字符串连接:)@ SM4我更新数据,我也发布C++代码。看看你能不能帮我:D谢谢!!!这是因为Bufferred reader在创建任何输出之前,将在等待新行字符或流结束字符时读取字节。这不是一个bug,bug在你的服务器中。服务器端是一个用C++编写的服务器,我可以用BuffErdRead来读取套接字。我什么都看不懂。我同意@sm4。客户端似乎没有关闭套接字。您可以通过发出命令“telnet”,键入一些东西,然后点击CTRL-结束,这样使用telnet进行测试。因此,您可以控制C++输出吗?尝试发送一些新行,看看bufferred读取器是否读取了任何内容。我认为问题可能出在服务器端。但绝对不要在循环中使用字符串连接:)@ SM4我更新数据,我也发布C++代码。看看你能不能帮我:D谢谢!!!这是因为Bufferred reader在创建任何输出之前,将在等待新行字符或流结束字符时读取字节。这不是一个bug,bug在您的服务器中。