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