.net Socket 文件传输

[复制链接]
查看11 | 回复1 | 2011-7-22 10:32:34 | 显示全部楼层 |阅读模式
客户端与服务端定义好自定义数据包协议,包头、包体。
客户端启动连接到服务器后,开始往服务器同步发送文件上传命令数据包,并开启异步接收。
服务端启动的时候,多线程接收客户端的连接,当某客户端连接到服务器,则建立一会话对象,该对象中的Socket开始异步接收。
当某一会话的异步接收函数的回调函数中解析数据包时,检测到文件上传请求时,则反馈相应的确认命令,检测到文件数据包时,则写入到服务器磁盘文件中,并反馈文件数据包接收确认数据包命令给客户端。
当会话的客户端在异步接收的回调函数中通过解析包,检测到文件上传确认命令,则开始同步发送文件数据包(大小为4K),而且客户端每次上传的文件是一个文件组,上传完第一个,接着上传第二个、第三个....。
现在问题是服务端接收的文件数据包有时候会造成丢失(每次异步回调接收文件数据包,都有日志记录),意思就是刚接完第2个文件数据包,下一个接收到是第5个或是第8个(客户端每次发送完数据包都有sleep(100)).
我想是不是我这种流程是错误的,是不是客户端每次发文件数据包之前,都必须已经接收到服务端的接收确认命令?
我用的Tcp
粘包问题也不可能,因为我现在接收端缓存大小就是一个包大小,以前是会出现粘包现象。
现在一个问题是:网络状况良好的情况下是不会有丢包问题,但客户端网速不好的话,就经常性的丢包。

回复

使用道具 举报

千问 | 2011-7-22 10:32:34 | 显示全部楼层
用的是UDP?应该用TCP。TCP是可靠的协议,而UDP存在这种不确定性,所以用UDP做文件的传输会比较麻烦一些。 ---------------------------TCP是不会丢包的,检查一下执行流程是不是有问题。...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行