我也有同样的问题,进度条 http://www.wrclub.net/study/listarticle.aspx?id=2536 相信会对楼主有帮助. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 p2p 即 peer to peer,点对点 你说的方法有问题吧?服务器发送byteread过来的时候,你怎么知道他会发多少次?你客户端该怎么调用BeginReceive?如果服务器连续send byteread的时候,还有可能TCP协议会帮你把数据重组到时候你收的就是一个包…… tear_pearl的担心我感觉有些多余,tcp协议本身是面向连接的协议,底层操作对发送失败已经作了处理,而且在传输层对每个数据包做好了自己的编号不过,由于是异步操作,客户端发送就当作发送成功是不正确的,而服务端一旦收取了数据肯定会给客户端一个应答,这是tcp协议面向连接所必需的,这个应答就是你所需要的,即表示服务器已经收到 tcp协议的应答你怎么可能得的到仔细想了一下,也许楼主的办法能行服务器receive一个包后,把byteread发送给客户端,当receive全部完成后,调用socket.shutdown(send)也就是客户端在send数据后,socket.shutdown(send);跟着接受BeginReceive在receivecallback函数里面用一个while循环,每读取一个byteread就相应调整进度条直到它从EndReceive中读到长度为0的数据,这也就意味着服务器全部接受完毕 可我又觉得这样代价太大了把,是不是客户端没发送完一段数据后就要beginreceive()服务端已接收到的字节数,接收到之后在beginsend(); 客户端是可以将所有数据一次发送完的,其中的数据分组由网络协议完成相信我,你一个10000大的数据,全部一次send,在sendcallback完成后,循环调用beginreceive 我试试。谢谢,不过还有个问题一直困扰着我:1。我现在是这么做的,在客户端传送文件的时候,每次都读1024byte,发送,前六位是协议头,如果不够就填充0,在服务端我也是每次接收1024个byte,如果接收不够1024,则循环接收,直到狗1024个为止,2,问题:我不知道如果我发送的不是固定长度的byte,每次发送不定数目的byte,载接收端我每次都接收到长度为1024byte的数组里,我每次接收后都要判断协议头,那我每次接收的是不是客户端每次发送的, 你不是用的异步吗??用异步的话就不需要你所说的:“在服务端我也是每次接收1024个byte,如果接收不够1024,则循环接收,直到狗1024个为止,”你去msdn查关键字“异步服务器”里面有个例子,仔细看看你应该是一直byteread = endreceive(ar)然后判断byteread的大小,如果为0,则表示已经全部接受完客户端发送过来的数据否则继续调用receivecallback当然,这要求客户端在sendcallback返回之后,调用socket.shutdown()如果后面该socket还有发送数据,则只shutdown send 1。做进度条时:我在客户端一次发送byte[1024]个,因为很多程序都这样写了,我不可能改了,我循环发送1024个,把文件发送完之后,在循环调用beginreceive接收字节数行不行。2。在服务端是不是我每次endreceive之后,都要beginsend endreceive的返回值呀3。你说的不用循环接收直到1024个字节,可我每个1024个字节的头六个字节是协议,我接收到之后必须判断该协议的内容,如果我再接收端现接收到500个,不循环接收,那下一次接收的头六个字节就不是协议字节了,就会出错的 jquery 去字符串<>标签 DataGridView怎么不显示数据呢? 能告诉我吗 方法越多越好! 谢谢各位了。。 某一窗体长时间卡死后,再显示时,不是在最上层 能给个进度条的简单例子吗。只要在程序运行过程中,这个进度条不停在动就行。 =SQL写过分页没=怎么写效率最高``大家一起来讨论下``` 如何设置PDF文件全屏模式(AxAcroPDFLib.AxAcroPDF) DropDownList的一个问题!!! 賊鳥求助:更新數據源問題 sqlsever 能不能象mdb一样设置一个永不重复的id字段 能否给解释下--“反射机制”吗?实例讲解更好,谢谢! 大问题 高手请进:关于部署
服务器发送byteread过来的时候,你怎么知道他会发多少次?
你客户端该怎么调用BeginReceive?
如果服务器连续send byteread的时候,还有可能TCP协议会帮你把数据重组
到时候你收的就是一个包……
仔细想了一下,也许楼主的办法能行
服务器receive一个包后,把byteread发送给客户端,当receive全部完成后,调用socket.shutdown(send)也就是客户端在send数据后,socket.shutdown(send);跟着接受BeginReceive
在receivecallback函数里面用一个while循环,每读取一个byteread就相应调整进度条
直到它从EndReceive中读到长度为0的数据,这也就意味着服务器全部接受完毕
相信我,你一个10000大的数据,全部一次send,在sendcallback完成后,循环调用beginreceive
不过还有个问题一直困扰着我:
1。我现在是这么做的,在客户端传送文件的时候,每次都读1024byte,发送,前六位是协议头,如果不够就填充0,在服务端我也是每次接收1024个byte,如果接收不够1024,则循环接收,直到狗1024个为止,
2,问题:
我不知道如果我发送的不是固定长度的byte,每次发送不定数目的byte,载接收端我每次都接收到长度为1024byte的数组里,我每次接收后都要判断协议头,那我每次接收的是不是客户端每次发送的,
用异步的话就不需要你所说的:“在服务端我也是每次接收1024个byte,如果接收不够1024,则循环接收,直到狗1024个为止,”你去msdn查关键字“异步服务器”
里面有个例子,仔细看看
你应该是一直byteread = endreceive(ar)
然后判断byteread的大小,如果为0,则表示已经全部接受完客户端发送过来的数据
否则继续调用receivecallback当然,这要求客户端在sendcallback返回之后,调用socket.shutdown()
如果后面该socket还有发送数据,则只shutdown send
2。在服务端是不是我每次endreceive之后,都要beginsend endreceive的返回值呀
3。你说的不用循环接收直到1024个字节,可我每个1024个字节的头六个字节是协议,我接收到之后必须判断该协议的内容,如果我再接收端现接收到500个,不循环接收,那下一次接收的头六个字节就不是协议字节了,就会出错的