rev 返回为0,数据接收却正确
时间:2010-09-10
来源:互联网
各位,
本人刚刚学习socket编程,使用tcp方式发送结构体,每次判断recv返回都为0,但是,可以正常接收结构体内容,不知道各位大侠知道原因吗?
作者: faye_cb 发布时间: 2010-09-10
作者: 冠希照相机 发布时间: 2010-09-10
作者: JohnBull 发布时间: 2010-09-10
到现在只发一贴。。。
作者: zhangsuozhu 发布时间: 2010-09-10
到现在只发一贴。。。
zhangsuozhu 发表于 2010-09-10 15:58
LZ威武,

作者: ecjtubaowp 发布时间: 2010-09-10
作者: 梅川内依酷 发布时间: 2010-09-10
作者: efolzl 发布时间: 2010-09-10
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include "packer.h"
#define PORT 4000
#define BACKLOG 10
int main()
{
int sock_listen_fd, sock_accept_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
PackHead packHead,rph;
Package packer, rp;
char buf[4096], rbuf[4096];
int sin_size;
int len;
if ((sock_listen_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("socket Create Error"

exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(PORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),

if (bind(sock_listen_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
printf("Socket Bind Error"

exit(1);
}
if (listen(sock_listen_fd, BACKLOG) == -1)
{
printf("Socket Listen Error"

exit(1);
}
while(1)
{
sin_size = sizeof(sockaddr_in);
if ((sock_accept_fd = accept(sock_listen_fd, (struct sockaddr *)&their_addr, (socklen_t*)&sin_size)) == -1)
{
printf("socket accept error"

continue;
}
printf("server : go Connection from %s:%d\n", inet_ntoa(their_addr.sin_addr), their_addr.sin_port);
if (!fork())
{
// if (send(sock_accept_fd, "hello, world!\n", 14, 0) == -1)
// {
// printf("send error"

// close(sock_accept_fd);
// exit(0);
// }
memset(buf, 0, 4096);
bzero(rbuf, 4096);
packHead.Version = 1;
packHead.Command = 1;
packHead.pLen = sizeof(Package);
memcpy(packer.data, "hello, world! by chenbo \n", sizeof("hello, world! by chenbo \n"

memcpy(buf, &packHead, sizeof(PackHead));
memcpy(buf + sizeof(PackHead), &packer, sizeof(Package));
for(int i = 0; i < 100; i++)
{
if (len = send(sock_accept_fd, buf, sizeof(PackHead) + sizeof(Package), 0) == -1)
{
printf("send error"

close(sock_accept_fd);
exit(0);
}
if (len = recv(sock_accept_fd, rbuf, sizeof(PackHead), 0) == -1)
{
perror("recv"

close(sock_accept_fd);
exit(0);
}
memcpy(&rph, rbuf, sizeof(PackHead));
if (len == sizeof(PackHead))
{
memcpy(&rph, rbuf, sizeof(PackHead));
}
printf("Recv Lenght: %d\n", len);
printf("packHead.Version=%d\n", rph.Version);
printf("packHead.Command=%d\n", rph.Command);
printf("packHead.pLen=%d\n", rph.pLen);
if (len = recv(sock_accept_fd, rbuf, sizeof(Package), 0) == -1)
{
memcpy(&rp, rbuf, sizeof(Package));
}
printf("Received: %s", rp.data);
printf("Lenght:%d\n",len);
// if (send(sock_accept_fd, (char *)&packer, sizeof(Package), 0) == -1)
// {
// printf("send error"

// close(sock_accept_fd);
// exit(0);
// }
}
close(sock_accept_fd);
}
while(waitpid(-1, NULL, WNOHANG) > 0);
}
close(sock_listen_fd);
return 0;
}
作者: faye_cb 发布时间: 2010-09-10
作者: faye_cb 发布时间: 2010-09-10
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28