VB的Socket.Send返回“一个非阻塞套接字操作无法立即完成。”
问题描述:
我有一台服务器可以发送文件给客户端请求它们。对于尺寸小于2演出的文件来说,它非常棒。 但是,当文件超过2演出,我的服务器在这里会给我一个溢出错误在昏暗的缓冲区。我查找它并发现缓冲区大小可能是(upload.SendBufferSize -1)。但是,更改这给了我一个不同的错误: 上传。发送:一个非阻塞套接字操作不能立即完成。VB的Socket.Send返回“一个非阻塞套接字操作无法立即完成。”
我搜索它从互联网上,和一个建议是尝试,如果发生错误添加Upload.Blocking =真,但后来我得到它说争辩是无效的错误。
对我的问题的任何建议?
Private Sub UploaderAccept(ar As IAsyncResult)
Dim File As IO.FileInfo = ar.AsyncState
Dim Upload As Socket = UploadServer.EndAccept(ar)
'--- Determine size of buffer
Dim fs As New IO.FileStream(File.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)
Dim buffer(Upload.SendBufferSize - 1) As Byte
Dim Sent As Long = 0
Dim t As Long = 0
'--- Actual sending
Do Until Sent >= File.Length
t = fs.Read(buffer, 0, buffer.Length)
Upload.Send(buffer, 0, t, SocketFlags.None)
Sent += t
Loop
'--- File transfer done
fs.Close()
Upload.BeginDisconnect(False, New AsyncCallback(AddressOf OnDisconnect), upload)
Upload.Close()
End Sub
答
好,我知道我自己,万一有人需要它,你不能从异步到syncronous改变做..只需使用:
Upload.BeginSend(缓冲,0,T,的Socket .None,新的AsyncCallback(AddressOf OnSend),上传):
Do Until Sent >= File.Length
t = fs.Read(buffer, 0, buffer.Length)
If t > 0 Then
Upload.BeginSend(buffer, 0, t, SocketFlags.None, New AsyncCallback(AddressOf UploadOnSend), Upload)
End If
Sent += t
TextUpdate(lblFilePerc, Sent)
Loop
Close streams...
Private Sub UploadOnSend(ar As IAsyncResult)
Dim upload As Socket = ar.AsyncState
upload.EndSend(ar)
End Sub