JUN少 2017-12-27 05:58 采纳率: 0%
浏览 1137
已结题

TCP IP协议客户端在全志R16 开发板上的时候丢失数据

1.服务器采用多线程客户端数据处理
void build_server()
{
int server_fd = 0,client_fd = 0;
struct sockaddr_in address;
memset(&address,0,sizeof(address));
server_fd = socket(AF_INET,1,0);

address.sin_family = AF_INET;
address.sin_port = htons(8998);
address.sin_addr.s_addr = INADDR_ANY;
if(bind(server_fd,(struct sockaddr*)&address,sizeof(address))<0)
{
    perror("service bind error");
    exit(1);
}
if(listen(server_fd,1024) < 0)
{
    perror("service listen error");
    exit(1);
}

#if 1
while(1)
{
printf("正在链接.......\n");
client_fd = accept(server_fd,NULL,NULL);
usleep(10000);
if(client_fd < 0)
{
printf("退出\n");
return;
}else{
#endif
pthread_t thread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_create(&thread,&attr,speech_request,(void*)client_fd);
}
}
return ;
}
线程处理如下:

struct post_content
{
int contType;
int contLength;
char buff[2048];
};
struct post_content recvData = {0};

while(1)
{

            memset(&recvData,0,sizeof(struct post_content));

            retVal = recv(clientFd,&recvData,sizeof(struct post_content),0);

................................

客户端请求发送
struct post_content 大小的数据 2056字节
,,

问题:
当客户端请求跑在PC unbuntu 下面时候,服务器接收数据是正常的,
当客户端跑在全志R16 的开发板上的时候,板子上发送 struct post_content 大小的数据
,服务器 一次只能接收到 1000多或者几百多字节数据,现在的做法是手动将数据拷贝到 struct post_content 大小。不太理解为什么TCP IP 会丢失数据

  • 写回答

1条回答 默认 最新

  • Me5201314You 2017-12-29 02:30
    关注

    使用TCP IP协议收发数据的时候,如果发送数据的操作比较快,可能会出现粘包问题,解决方案是设置定时器。

    评论

报告相同问题?

悬赏问题

  • ¥15 鸿业暖通修改详细负荷时闪退
  • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体