Не удается собрать данные tcp для векторных openframworks

Я пытаюсь заполнить векторный символ данными из указателя через ofxTCPClient.

Указатель tmpData получает данные, но я получаю эту ошибку, если пытаюсь вставить данные в вектор.

Даже если я попытаюсь заполнить вектор символом «вручную», вот так:
tcpMainData.push_back ( ‘а’);

я получу ошибку:

libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
(lldb)

Это моя программа:

#include "ofApp.h"
using namespace std;

vector<char> tcpMainData;

//This is a temporary size variabel, until a function is made.
int tmpDataSize = 100;
char tmpData;//--------------------------------------------------------------
void ofApp::setup(){

}

//--------------------------------------------------------------
void ofApp::update(){

//Listen on the port for tcp data if we are connected to the server
if (!TCPClient.isConnected()) {
state = OFFLINE;
}else if (TCPClient.isConnected() && state != RECEIVING) {
state = LISTENING;
}

//TCP package received
if((int)TCPClient.receiveRawBytes((char *) &tcpMainData, sizeOfTcpChunk) > 1 && state == LISTENING) {

state = RECEIVING;
}

//Filling up vector with tcp data
if (state == RECEIVING) {

for (int i = 0; i < tmpDataSize; i++) {
TCPClient.receiveRawBytes((char *) &tmpData, sizeOfTcpChunk);

tcpMainData.push_back(tmpData);
}

state = LISTENING;
}
}

//--------------------------------------------------------------
void ofApp::draw(){

if (state == OFFLINE) {
ofDrawBitmapString("Press C to connect", 50, 100);
}
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

if (key == 'c') {
TCPClient.setup("127.0.0.1", TCPPort);
}
}

Вот мой заголовок, если это актуально:

...

//TCP CONF
ofxTCPClient TCPClient;
int TCPPort = 50014;

int sizeOfTcpChunk = 4;             //Size of TCP packages (Chunks)

//Program state
enum clientState {
OFFLINE,
LISTENING,
RECEIVING,
};

clientState state = LISTENING;

0

Решение

Вы не указали, где произошла ошибка.
Здесь есть две вещи не так (я поместил пункты из вашего кода в контекст здесь):

vector<char> tcpMainData;
TCPClient.receiveRawBytes((char *) &tcpMainData, sizeOfTcpChunk)

Вы бросили вектор на символ * неправильно. Так должно быть

(char *) &tcpMainData[0]

и я сильно сомневаюсь, что вы можете использовать это для записи tcpMainData, Этот акт предназначен только для чтения из вектора. Я думаю, что вы получаете сообщение об ошибке из-за этого.

а также

char tmpData;
TCPClient.receiveRawBytes((char *) &tmpData, sizeOfTcpChunk);

Как упоминал Галик, tmpData — это один байт. Вам нужно что-то вроде символа tmpData[100]

Для справки, подпись функции TCPClient.receiveRawBytes:

int ofxTCPClient::receiveRawBytes(char *receiveBytes, int numBytes)
0

Другие решения


По вопросам рекламы [email protected]