【发布时间】:2009-12-07 04:23:15
【问题描述】:
我正在尝试通过 UDP 套接字发送我的结构。
结构包{ 整数序列号; 字符数据[缓冲区大小]; };
所以我的发件人
bytes = sizeof(packet);
char sending[bytes];
bzero(sending, bytes);
memcpy((void *) sending, (void *) &packet, sizeof(bytes));
bytes = sendto(sockfd, sending, sizeof(sending), 0,
(struct sockaddr *) &client, clientSize);
所以我希望将我的结构复制到 Char[] 中。
在我的接收器上
int bytes;
bytes = sizeof(struct Packet);
char recv[bytes];
bytes = recvfrom(sockfd, recv, bytes, 0,
(struct sockaddr *) &client, &clientSize);
memcpy((void *) currentpkt, (void *) recv, bytes);
但是在接收器上 memcpy((void *) currentpkt, (void *) recv, bytes); 我得到一个错误:
错误:无法转换为指针类型
我做错了什么?有没有更好的方法通过 UDP 套接字发送我的结构?
***** 更新 *****
感谢大家的回答。最后我错过了“&”,但我的代码现在看起来像这样。
发件人:
void udt_send(struct Packet packet) {
int bytes;
bytes = sendto(sockfd, (char *) &packet, sizeof(packet), 0,
(struct sockaddr *) &client, clientSize);
}
接收者:
bytes = recvfrom(sockfd, (char *) ¤tpkt, bytes, 0,
(struct sockaddr *) &client, &clientSize);
在 C 语言中,我们可以将其转换为 char 并发送字节,这很好。
【问题讨论】:
-
结构数据包 currentpkt; // 全局变量
-
问题一:当你不需要使用全局变量时,不要使用全局变量。
标签: c sockets struct udp memcpy