社区
网络及通讯开发
帖子详情
第一次接收数据正确,第二次就出错
conquer2009
2009-03-18 01:48:50
server端运行在linux下
client端运行在windows下
client向server发送数据(自定义的结构体),第一次能发送正确,而且server端能正确显示出来
第二次发送就出错,无法得到正确的数据...
请问这是为什么捏?
...全文
131
10
打赏
收藏
第一次接收数据正确,第二次就出错
server端运行在linux下 client端运行在windows下 client向server发送数据(自定义的结构体),第一次能发送正确,而且server端能正确显示出来 第二次发送就出错,无法得到正确的数据... 请问这是为什么捏?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,可以用什么程序抓服务器端的包啊?
微信公众平台深度开发v2.0第1季——微信公众号基础功能、接收普通消息、被动回复用户消息
自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权...
STM32 ucosii 串口
接收数据
遇到的问题及解决思路
写一个程序,用到了ucos ii ,串口在中断中
接收数据
(一包数据 8个字节 包含: 1byte包头 5byte数据 1byte校验和 1byte 包尾 ) ,数据由上位机每隔500ms发送一次,在串口中断中接收1byte数据放到数组Rev_dat[8]中并判断,直到接收到包尾后进行校验和判断 , 如果数据
正确
后 把接收到的数据存到另外一个数组B中 ,然后发送消息量给任务A ,任务A接收到消息量进...
linux can
接收数据
出错
,CAN为什么会发送失败
CAN总线调试过程中出现报文发送失败,很多工程师都对此只知其一不知其二,这里就CAN报文发送失败的问题我们来做一次探讨。在了解CAN报文为什么会发送失败之前我们先看看一条
正确
的CAN报文到底应该是怎么样的,表1是一个正常标准数据帧的报文组成。表 1 标准数据帧报文格式组成图 1 标准数据帧格式CAN总线是一种基于广播的通讯方式,为了保证总线上的每一个正常节点都能
正确
的接收到报文,报文的发送者要求每...
arm-linux串口接收
出错
在一帧数据的接收中,一帧数据,会被分两次接收,如下:
第一次
接收一部分,
第二次
接收一部分; recv data from downline: 0x66 0x17 0x0 0xc1 0x0 0x1 0x0 0x0 0x0 0x0 0x11 0x1 0x0 0x0 0x1 0x41 0x33 0x0 0x1 0x0
串口通信中
接收数据
时延迟处理与缓存处理的解决方案(C#)
利用串口进行通信,当发送方(A)将数据写入串口后,通过无线或有线方式将数据传送给接收方(B),B通过调用串口读方法comm.read(参数)即可将数据读出。原理十分简单,但最近在利用串口处理SM-42无线传输时,数据总是一段一段的传到B,并不能在comm_DataReceived方法中单纯使用read方法将数据接收完全。我知道用缓存机制,但由于经验少(正在实习),到网上找了找大牛们的方法,并结合自
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章