【发布时间】:2017-04-24 23:32:48
【问题描述】:
虽然这可能是重复的帖子,但我想确定它在我的特定代码中是如何工作的。
我想实现什么?
通过 TCP/IP 连接发送和接收结构。
到目前为止我有什么?
发件人
初始化结构:
typedef struct soutputdata {
unsigned long long ull_date;
unsigned int ui_ixl;
unsigned int ui_type;
unsigned int ui_index;
char c_values[64][2];
int i_valueid;
} s_OUTPUTDATA;
typedef struct sheader {
int i_head;
} s_HEADER;
typedef struct soutdata {
s_HEADER *sHeader;
s_OUTPUTDATA *sDATAout;
} s_OUTDATA;
我现在想向连接的 TCP 客户端发送一个 s_OUTDATA 结构。
分配内存(正确吗?):
s_OUTDATA *poutData = malloc(sizeof(s_OUTDATA));
poutData->sDATAout = malloc(sizeof(s_OUTPUTDATA));
poutData->sHeader = malloc(sizeof(s_HEADER));
发送结构体(我怎样才能得到整个 s_OUTDATA 结构体的正确大小?):
if ((send(sendSocket, poutData, 1024, 0)) == -1) {
fprintf(errlog, "%.3f error: %s(): Failure Sending Message!\n", gettime(), __func__);
close(sendSocket);
}
接收者
初始化结构:
typedef struct soutputdata {
unsigned long long ull_date;
unsigned int ui_ixl;
unsigned int ui_type;
unsigned int ui_index;
char c_values[64][2];
int i_valueid;
} s_OUTPUTDATA;
typedef struct sheader {
int i_head;
} s_HEADER;
typedef struct soutdata {
s_HEADER *sHeader;
s_OUTPUTDATA *sDATAout;
} s_OUTDATA;
分配内存(正确吗?):
s_OUTDATA *p = malloc(sizeof(s_OUTDATA));
poutData->sDATAout = malloc(sizeof(s_OUTPUTDATA));
poutData->sHeader = malloc(sizeof(s_HEADER));
接收结构体:
if ((num = recv(newSocket, p, 1024,0)) == -1) {
perror("recv");
exit(1);
}
else if (num == 0) {
printf("Connection closed\n");
}
有什么问题?
在尝试处理接收到的数据时,我遇到分段错误。
printf("ui_index: %d\n", p->sDATAout->ui_index);
我错过了什么?
我想我在内存分配上做错了什么,但我不确定是什么以及如何解决它。
【问题讨论】:
标签: c sockets struct tcp malloc