QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1200|回复: 3

网络编程问题求助

[复制链接]
发表于 2006-4-13 22:30:06 | 显示全部楼层 |阅读模式
本人最近在写一个C-S结构的文件传输程序,关键的文件传输部分如下:
ssize_t readall(int fd, void *buf, size_t *len)
{
        size_t nleft;
        ssize_t nread;
        ssize_t total;
        char *ptr;
        ptr = buf;
        nleft = *len;
        total = 0;
   
        FILE *fp;
       
        if ((fp = fdopen(fd,"r")) == NULL)
        {
                perror("fdopen error\n");
                exit(1);
        }
       
        while( nleft > 0)
        {
                /*if((nread = read(fd,ptr,*len)) == -1)
                {       
                        perror("readall");
                        break;
                }*/
                if ((nread = fread(ptr,sizeof(char),*len,fp)) == -1)
                {
                        perror("readall");
                        break;
                }

                if(nread ==0)
                        break;
                nleft -= nread;
                ptr += nread;
                total += nread;
                *len = nleft;
        }
        *len = total;       
        return (nread==-1)?-1:0;
}

ssize_t writeall(int fd, void* buf,size_t *len)
{
        size_t nleft;
        ssize_t nwrite;
        ssize_t total;
        const char *ptr;
        ptr = buf;
        nleft = *len;
        total = 0;
  
        FILE *fp;

        if((fp = fdopen(fd,"w")) == NULL)
        {
                perror("fdopen error\n");
                exit(1);
        }
        while( nleft > 0)
        {
                /*if((nwrite = write(fd,ptr,*len))== -1)
                {
                        perror("write all");
                        break;
                }*/
                if ((nwrite = fwrite(ptr,sizeof(char),*len,fp)) == -1)
                {
                        perror("write all\n");
                        break;
                }
                nleft -= nwrite;
                ptr += nwrite;   
                total += nwrite;
                *len = nleft;
        }
        *len = total;
        return (nwrite==-1)?-1:0;
}

现在遇到一个奇怪的问题,如果在这个程序中使用read/write函数,则文件传输正常,
若改为标准IO函数,使用fread/fwrite函数则出现问题.经过检察发现服务器端的读文件发送到Socket没有问题,但客户端无法从socket中读出数据.请教各位这是什么原因?
发表于 2006-4-13 23:07:47 | 显示全部楼层
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&p=4576600#4576600
回复

使用道具 举报

发表于 2006-4-14 20:20:10 | 显示全部楼层
不知道你是因为已经发过来没有读出来,还是根本就没有发过来,你先自己用tcpdump或ethereal分析一下,确定一下原因,自己应该可以解决的,看不出你的代码有什么错。
回复

使用道具 举报

发表于 2006-4-15 00:00:31 | 显示全部楼层
无语
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 18:31 , Processed in 0.044680 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表