Server
while(true)
{
recv(buf,..);
if(buf=="end")
{
break;
}
else
{
fwrite();
}
}
Client
while(!feof(fp)
{
fread(buf,...);
send(socket,..);
}
小文件可以完整接受,但大的文件就会小1-2k
怀疑是粘包或者是接收端部分数据没有接收到
麻烦各位给指点下
14 个解决方案
#1
recv(), send()请检查返回值。
#2
1、你的buffer的大小是多少?
2、大的文件是多大?
3、什么要的网络条件,如果是局域网的话,丢包的可能性不大 ,你使用抓包软件抓包看看
4、最好写个日志来进行分析。
2、大的文件是多大?
3、什么要的网络条件,如果是局域网的话,丢包的可能性不大 ,你使用抓包软件抓包看看
4、最好写个日志来进行分析。
#3
如果能够排除文件读取不完整的情况,你的发送端是否存在发送失败的情况?
#4
搭一下便车,
请问一下如何开发基于蓝牙的Winodws PC 程序与手机等设备传输数据:
1、开发环境要求,Winsock是否可以满足了,与传统的网络编程有何区别,
2、蓝牙各种协议栈是否会带来兼容性问题。。
3、通过虚礼串口实现和通过Winsock实现比较。。。
谢谢!!!
请问一下如何开发基于蓝牙的Winodws PC 程序与手机等设备传输数据:
1、开发环境要求,Winsock是否可以满足了,与传统的网络编程有何区别,
2、蓝牙各种协议栈是否会带来兼容性问题。。
3、通过虚礼串口实现和通过Winsock实现比较。。。
谢谢!!!
#5
猜想: 会不会是客户端接收数据太慢,,接收数据的缓冲区益处。。。。
#6
文件读的没问题,buf为1k,5楼的接受数据缓冲区溢出怎么理解?
#7
问题解决,发送100k后让发送端休眠一段时间继续发送,这样受到的数据就是完整的了。想知道每次发多少合适?
#8
明白了,首先你的SEND没有重发和错误处理机制,其次,你对发送缓冲没有设置大小,致使发送过大时,累积几次可能造成发送的BUFFER BLOCK错误。
#9
发送100k要休眠,但是这应该不是问题的原因吧。
首先确认重发机制,然后,据说 不要使用feof,使用文件length判断是否发送完成。
首先确认重发机制,然后,据说 不要使用feof,使用文件length判断是否发送完成。
#10
正解 send函数,一定要判断,是否成功。当系统的缓存区被你塞满的时候,就会失败,你需要重新发,直到成功。send函数,并不是把数据直接发到对方,而是先发到系统缓存区,由操作系统负责真正发送,其它送速度跟网速,硬件环境有关。
#11
应该出现了滑动窗口慢的情况,发送的返回值也要判断下
另:你的判断结束的方式不是很好,最好还是先把长度发送过去,或者干脆弄个协议,没个包都要加个长度,这样才能保证接收完整
另:你的判断结束的方式不是很好,最好还是先把长度发送过去,或者干脆弄个协议,没个包都要加个长度,这样才能保证接收完整
#12
tcp是字节流,因此要自行定义好应用层的协议,来标识数据流的开始和结束。
#13
buf=="end" 这样判断好像非正常做法,也没试过,一般用strcmp等
#14
学习了
#1
recv(), send()请检查返回值。
#2
1、你的buffer的大小是多少?
2、大的文件是多大?
3、什么要的网络条件,如果是局域网的话,丢包的可能性不大 ,你使用抓包软件抓包看看
4、最好写个日志来进行分析。
2、大的文件是多大?
3、什么要的网络条件,如果是局域网的话,丢包的可能性不大 ,你使用抓包软件抓包看看
4、最好写个日志来进行分析。
#3
如果能够排除文件读取不完整的情况,你的发送端是否存在发送失败的情况?
#4
搭一下便车,
请问一下如何开发基于蓝牙的Winodws PC 程序与手机等设备传输数据:
1、开发环境要求,Winsock是否可以满足了,与传统的网络编程有何区别,
2、蓝牙各种协议栈是否会带来兼容性问题。。
3、通过虚礼串口实现和通过Winsock实现比较。。。
谢谢!!!
请问一下如何开发基于蓝牙的Winodws PC 程序与手机等设备传输数据:
1、开发环境要求,Winsock是否可以满足了,与传统的网络编程有何区别,
2、蓝牙各种协议栈是否会带来兼容性问题。。
3、通过虚礼串口实现和通过Winsock实现比较。。。
谢谢!!!
#5
猜想: 会不会是客户端接收数据太慢,,接收数据的缓冲区益处。。。。
#6
文件读的没问题,buf为1k,5楼的接受数据缓冲区溢出怎么理解?
#7
问题解决,发送100k后让发送端休眠一段时间继续发送,这样受到的数据就是完整的了。想知道每次发多少合适?
#8
明白了,首先你的SEND没有重发和错误处理机制,其次,你对发送缓冲没有设置大小,致使发送过大时,累积几次可能造成发送的BUFFER BLOCK错误。
#9
发送100k要休眠,但是这应该不是问题的原因吧。
首先确认重发机制,然后,据说 不要使用feof,使用文件length判断是否发送完成。
首先确认重发机制,然后,据说 不要使用feof,使用文件length判断是否发送完成。
#10
正解 send函数,一定要判断,是否成功。当系统的缓存区被你塞满的时候,就会失败,你需要重新发,直到成功。send函数,并不是把数据直接发到对方,而是先发到系统缓存区,由操作系统负责真正发送,其它送速度跟网速,硬件环境有关。
#11
应该出现了滑动窗口慢的情况,发送的返回值也要判断下
另:你的判断结束的方式不是很好,最好还是先把长度发送过去,或者干脆弄个协议,没个包都要加个长度,这样才能保证接收完整
另:你的判断结束的方式不是很好,最好还是先把长度发送过去,或者干脆弄个协议,没个包都要加个长度,这样才能保证接收完整
#12
tcp是字节流,因此要自行定义好应用层的协议,来标识数据流的开始和结束。
#13
buf=="end" 这样判断好像非正常做法,也没试过,一般用strcmp等
#14
学习了