第一次接收数据正确,第二次就出错

conquer2009 2009-03-18 01:48:50
server端运行在linux下
client端运行在windows下

client向server发送数据(自定义的结构体),第一次能发送正确,而且server端能正确显示出来
第二次发送就出错,无法得到正确的数据...

请问这是为什么捏?
...全文
131 10 打赏 收藏 转发到动态 举报
写回复
用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,可以用什么程序抓服务器端的包啊?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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