我是C ++的菜鸟。我有一个关于动态初始化字符缓冲区的问题
class Pkg {
public:
Header t;
char buf[LENGTH];
};
我将通过网络发送课程对象。 标头类转换为网络字节顺序
所以,我想像这样发送它
Pkg ackpkt;
sendto(sd, &ackpkt, sizeof(ackpkt), 0,(struct sockaddr*)socket1,sizeof(struct sockaddr_in);
每次调用sendto之前,都应该动态分配LENGTH字段。 我认为这样做的一种方法是宣布LENGTH是全球性的。
在接收方,我希望在同一个类的对象中接收对象。对象t的数据应该在ackpktrecv.t中组织,缓冲区在ackpktrecv.buf中
recvfrom(sd,& ackpktrecv,sizeof ackpktrecv,0,(struct sockaddr *)& sockaddrs,& len);
如何使用长度与LENGTH相同的字符缓冲区接收对象 任何人都可以建议我以什么方式实现这一目标?
答案 0 :(得分:1)
由于这是C ++,请考虑使用vector<T>
而不是char。
class Pkg {
public:
Pkg(vector<char>::size_type size) :buf(size) {
}
vector<char> buf;
};
这允许您以下列方式发送数据
Pkg ackpkt(someSize);
sendto(
sd,
&(ackpkt.buf[0]),
actpkt.buf.size(),
0,
(struct sockaddr*)socket1,
sizeof(struct sockaddr_in)
答案 1 :(得分:0)
我推荐使用RAII成语:
length
参数,并使用buf
在构造函数中分配new char[length]
。delete[] buf
然后每次循环时,只需创建一个具有所需长度的新Pkg
对象。