无法收集 tcp 数据以矢量 openframworks
Can't collect tcp data to vector openframworks
我正试图通过xtcpclient从指针填充一个矢量字符。
指针tmpData正在接收数据,但如果我试图将数据推入向量,我会得到此错误。
即使我尝试像这样用字符"手动"填充向量:tcpMainData.push_back (' a ');
出现错误:
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;
你漏掉了错误发生的地方。
这里有两件事是错误的(我把你的代码点放在这里的上下文中):
vector<char> tcpMainData;
TCPClient.receiveRawBytes((char *) &tcpMainData, sizeOfTcpChunk)
将vector类型转换为char*错误。应该是
(char *) &tcpMainData[0]
,我强烈怀疑你可以用它来写tcpMainData
。此强制转换仅用于从vector对象中读取数据。我的猜测是,您会因此得到错误消息。
和
char tmpData;
TCPClient.receiveRawBytes((char *) &tmpData, sizeOfTcpChunk);
正如Galik提到的,tmpData是一个字节。你需要char tmpData[100]
作为参考,TCPClient的签名。receiveRawBytes函数为:
int ofxTCPClient::receiveRawBytes(char *receiveBytes, int numBytes)
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 无法收集 tcp 数据以矢量 openframworks