关于SOCKET接收不到数据

liuyiye 2009-12-24 09:55:23
发送端:
结构体
typedef struct head_packet
{
char type[20]; //类型
int length; //长度
char aque[20]; //序列号
} ST_HEAD_PACKET;
发送数据:
strncpy(head_package->type , "log" , sizeof("log"));
head_package->length = strlen(head_package->type);
strncpy(head_package->aque , "log" , sizeof("log"));

writen(sd , head_package, sizeof(struct head_packet));
函数:
ssize_t writen(int fd, const void *ptr, size_t n)
{
size_t nleft;
ssize_t nwritten;

nleft = n;
while (nleft > 0) {
if ((nwritten = write(fd, ptr, nleft)) < 0) {
if (nleft == n)
return(-1); /* error, return -1 */
else
break; /* error, return amount written so far */
} else if (nwritten == 0) {
break;
}
nleft -= nwritten;
ptr += nwritten;
}
return(n - nleft); /* return >= 0 */
}
接收端:
head_package = (ST_HEAD_PACKET *)malloc(sizeof(struct head_packet));
memset(head_package , 0 , sizeof(struct head_packet));
readn(sd , head_package , sizeof(head_package));
printf("%s\n" , head_package->type);
printf("%s\n" , head_package->aque);
问题:
接收端只能收到head_package->type 不能接收到head_package->aque
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
james_hw 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuyiye 的回复:]
找到问题所在 了 谢谢回答 是因为readn(sd , head_package , sizeof(head_package)); 中的sizeof(head_package)); 内存不够 应该是sizeof(struct head_packet)
[/Quote]

说实话,没看懂两者的区别
james_hw 2009-12-24
  • 打赏
  • 举报
回复
readn(sd , head_package , sizeof(head_package));

这个函数不知道怎么实现的。不过建议你先select,然后再recv

另外消息太少了,从你列出的情况来看没什么错误,最好把你怀疑的地方加亮一下
liuyiye 2009-12-24
  • 打赏
  • 举报
回复
找到问题所在 了 谢谢回答 是因为readn(sd , head_package , sizeof(head_package)); 中的sizeof(head_package)); 内存不够 应该是sizeof(struct head_packet)
owenlzb2004 2009-12-24
  • 打赏
  • 举报
回复
检查一下程序,readn()这个函数如果是自己写的,贴上来看看,如果是用库函数,那你估计写错了,应该是recv()
liuyiye 2009-12-24
  • 打赏
  • 举报
回复
readn(sd , head_package , sizeof(head_package));改成
recv(sd , head_package , sizeof(head_package) , MSG_WAITALL);

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧