【发布时间】:2012-08-29 10:28:21
【问题描述】:
1:服务器将文件大小复制到缓冲区并发送:
snprintf(t_buf, 255, "%" PRIu32, fsize);
if(send(f_sockd, t_buf, sizeof(t_buf), 0) < 0){
perror("error on sending file size\n");
onexit(f_sockd, m_sockd, 0, 2);
}
2:客户端收到文件大小,放入fsize:
if(recv(f_sockd, t_buf, sizeof(t_buf), 0) < 0){
perror("error on receiving file size");
onexit(f_sockd, 0 ,0 ,1);
}
fsize = atoi(t_buf);
----------------- 上面的代码让我的程序完美运行!
如果我编写这段代码而不是之前的代码,就会出现问题:
1:服务器发送fsize:
if(send(f_sockd, &fsize, sizeof(fsize), 0) < 0){
perror("error on sending file size\n");
onexit(f_sockd, m_sockd, 0, 2);
}
2:客户端收到fsize:
if(recv(f_sockd, &fsize, sizeof(fsize), 0) < 0){
perror("error on receiving file size");
onexit(f_sockd, 0, 0, 1);
}
uint32_t fsize; 和 char t_buf[256];.
问题是第一种方法都可以工作,但第二种方法客户端不会收到所有文件,而只会收到其中的一部分。这段代码有什么问题?
谢谢!
【问题讨论】:
-
看起来不像,上面的代码就是错的;-)。
-
客户端和服务器是否在同一台机器上? 只有一部分是什么意思?
-
@hmjd 是的!巴特:你能解释一下为什么吗?:)
-
我看错了。我认为 fsize 是指向缓冲区的指针。