c语言socket文件传输问题
在传送在小文件时都是正常的但是一旦传送大文件会出现接收端比传送端先结束的情况强烈希望大牛指导。。感激不尽解决的话积分追加100~http://hi.baidu.com/x...
在传送在小文件时都是正常的
但是一旦传送大文件
会出现接收端比传送端先结束的情况
强烈希望大牛指导。。
感激不尽
解决的话
积分追加100~
http://hi.baidu.com/xiafei/blog/item/ad37bb99c92ecc026e068c29.html
这是地址。。 忘记了
1楼的朋友 我知道大数据包需要拆分 不过还没怎么看 但拆分的话就一定能解决我所说的问题吗?
2楼的朋友 能具体说下吗? 这为什么会导致出现我所描述的问题呢? 展开
但是一旦传送大文件
会出现接收端比传送端先结束的情况
强烈希望大牛指导。。
感激不尽
解决的话
积分追加100~
http://hi.baidu.com/xiafei/blog/item/ad37bb99c92ecc026e068c29.html
这是地址。。 忘记了
1楼的朋友 我知道大数据包需要拆分 不过还没怎么看 但拆分的话就一定能解决我所说的问题吗?
2楼的朋友 能具体说下吗? 这为什么会导致出现我所描述的问题呢? 展开
3个回答
展开全部
服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充服务器的地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至此服务器阻塞,等待客户端的连接。
客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。
第二阶段,发送文件。
服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。
客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。
客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。
第二阶段,发送文件。
服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。
客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。
展开全部
朋友,你好!上次是我的错的,我没有把你的程序 看清。今晚我把你程序拷了下来,放到了自己的机子调式了下,我传的是1.5G(应该够大了吧)一部电影,确实遇到你说的那种情况,但是是电影会传到server端时,是好的,没有损坏了,可以正常播放。但是你的那个接收端比传送端先结束的情况我仍然想不明白,但是后来,我觉得是server端和client端在同一台机子上的原因,就找了同学的机子试了下(两台电脑,一个做server,一个做client),结果你说的那种情就没有了,server和client几乎是同时结束的!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说说我的看法吧。
发送的数据太大就要涉及到拆分数据包
发送的数据太大就要涉及到拆分数据包
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询