社区
网络及通讯开发
帖子详情
第一次接收数据正确,第二次就出错
conquer2009
2009-03-18 01:48:50
server端运行在linux下
client端运行在windows下
client向server发送数据(自定义的结构体),第一次能发送正确,而且server端能正确显示出来
第二次发送就出错,无法得到正确的数据...
请问这是为什么捏?
...全文
139
10
打赏
收藏
第一次接收数据正确,第二次就出错
server端运行在linux下 client端运行在windows下 client向server发送数据(自定义的结构体),第一次能发送正确,而且server端能正确显示出来 第二次发送就出错,无法得到正确的数据... 请问这是为什么捏?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
conquer2009
2009-03-19
打赏
举报
回复
自己顶一个再问:服务器端是linux,可以用什么程序抓服务器端的包啊?
conquer2009
2009-03-19
打赏
举报
回复
经检测,当我把 包裹函数Readline换成read就正常了,即把 if ((nread = Readline(sockfd, buff, 10) == 0) 换成 if ((nread = Read(sockfd, buff, 10) == 0) 就正常了
但是包裹函数Readline是来自unix 网络编程里面的。。如果错了的话,错在哪里呢。。。不解,请教
conquer2009
2009-03-18
打赏
举报
回复
是不是static的原因?
我来看看CB
2009-03-18
打赏
举报
回复
因为程序有问题,哈哈
我不懂电脑
2009-03-18
打赏
举报
回复
看看服务端是否正确拆包
xjq2003
2009-03-18
打赏
举报
回复
接受完第一次
重新初始化,看如何?
ydlchina
2009-03-18
打赏
举报
回复
看是否有内存泄露。原因很多
conquer2009
2009-03-18
打赏
举报
回复
我分析了客户端的数据包,是正确的,看来是服务端的问题...我不知道怎么在linux下抓包...下面是服务端的程序...我找了很久都没找到哪儿有错...
server端主程序: server.c
char buff[3000];
int nread;
for(;;)
{
if ((nread = Readline(sockfd, buff, 10) == 0)
{
printf("it's 0\n");
return;
}
printf("%s\n", buff);
}
=================我是可爱的分割线==========================================
以下是readlin.c文件
static int read_cnt;
static char *read_ptr;
static char read_buf[MAXLINE];
sszie_t Readline(int fd, void *ptr, size_t maxlen)
{
sszie_t n;
if ((n = readline(fd, ptr, maxlen)) < 0)
err_sys("readline error");
return(n);
}
ssize_t readline(int fd, void *vptr, size_t maxlen)
{
ssize_t n, rc;
char c, *ptr;
ptr = vptr;
for(n = 1; n < maxlen; n++)
{
if((rc = my_read(fd, &c)) == 1)
{
*ptr++ = c;
if(c == '\n')
break; //newline is stored, like fgets();
}
else if(rc == 0)
{
*ptr = 0;
return(n - 1); // EOF, n - 1 bytes were read
}
else
return(-1); //error, errno set by read();
}
}
static ssize_t
my_read(int fd, char *ptr)
{
if (read_cnt <= 0)
{
again:
if ((read_cnt = read(fd, read_buf, sizeof(read_buf))) < 0)
{
if (errno == EINTR)
goto again;
return(-1);
}
else if(read_cnt == 0)
return(0);
read_ptr = read_buf;
}
read_cnt--;
*ptr = *read_ptr++;
return(1);
}
ccrun.com
2009-03-18
打赏
举报
回复
用抓包的程序将客户端每次发出的和服务端每次接收的包分析一下是否相同。
conquer2009
2009-03-18
打赏
举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
用抓包的程序将客户端每次发出的和服务端每次接收的包分析一下是否相同。
[/Quote]
服务器端是linux,可以用什么程序抓服务器端的包啊?
IIC 踩过的坑
读取IT8563WE时,读取
第一次
正确
,
第二次
错误,第三次
正确
,第四次错误。。。。。。 看到读取成功之后,SDA信号没有被
正确
拉高,电平大概只有一半。 再次读取,主机设置读模式时,从机会发送NACK,会将电平拉高...
STM32 ucosii 串口
接收数据
遇到的问题及解决思路
写一个程序,用到了ucos ii ,串口在中断中
接收数据
(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串口中断中接收1byte数据放到数组Rev_dat[8]中并...
vue请求
第一次
失败,多次刷新后成功
问题描述:之前前端做好后整合网关,发现请求后台数据老是
第一次
失败,前端
接收数据
为空,得多刷新几次后才能成功,且有个请求后台执行时间较长,请求返回数据为空。 解决思路:以为是因为axios请求异步问题,研究多...
arm-linux串口接收
出错
在一帧数据的接收中,一帧数据,会被分两次接收,如下:
第一次
接收一部分,
第二次
接收一部分; recv data from downline: 0x66 0x17 0x0 0xc1 0x0 0x1 0x0 0x0 0x0 0x0 0x11 0x1 0x0 0x0 0x1 0x41...
linux can
接收数据
出错
,CAN为什么会发送失败
CAN总线调试过程中出现报文发送失败,很多工程师都对此只知其一不知其二,这里就CAN报文发送失败的问题我们来做一次探讨。在了解CAN报文为什么会发送失败之前我们先看看一条
正确
的CAN报文到底应该是怎么样的,表1是...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章