0
void *interpretWrapper(void* arg) {
    char* res = (char*) arg;
    cout << res[0] << endl;
}

void *recvConn(void * data) {
    char buffer[1024];
    int buffer_len = 1024;
    while(true) {
        memset(buffer, 0, buffer_len);

        if((bytecount = recv(*csock, buffer, buffer_len, 0)) == -1)  {
        printf("yalehwyyy\n");
        fprintf(stderr, "Error receiving data %d\n", errno);
        printf("%d", csock);
        break;
        }else if (bytecount == 0) {
            fprintf(stderr, "Socket Closed ! Robotino needs to reconnect !!\n");
            break;
        }

      pthread_t thread_id = 0;
      pthread_create(&thread_id, NULL, interpretWrapper, &buffer);
      pthread_detach(thread_id);
      printf("Received bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
   }
}

上記のコードでは、バッファに配置された文字列を受信するたびに、その文字列を recvConn に出力し、結果は実際に送信された文字列になります。ただし、文字列が interpretWrapper に渡されると、res[0] を出力したときに得られるのは空の文字だけですが、予想される出力は送信された文字列の最初の文字になります。また、文字列を使用してみましたが、空の文字列も取得しました。

さらに、整数を送信しようとしましたが、整数を interpretWrapper 内に出力すると、渡された整数が正しく生成されました。2 日間ずっとそれを理解しようとしてきましたが、何が問題なのですか?

4

2 に答える 2

0

ループ時にポインタが変更されるため、バッファのコピーを送信してください。

于 2013-06-18T14:43:00.850 に答える