У меня есть сервер, который может отправлять файлы клиентам, запрашивающим их. Он отлично работает с файлами размером менее 2 концертов. Однако, если файл превышает 2 концерта, мой сервер здесь даст мне ошибка переполнения по адресу Dim buffer. Я искал его и обнаружил, что размер буфера может быть (upload.SendBufferSize -1). Тем не менее, изменение этого дает мне другую ошибку: Загрузить.Отправить: Невозможно завершить операцию блокировки сокета.VB Socket.Send возвращает «Операция без блокировки сокетов не может быть выполнена немедленно».
Я искал его из Интернета, и было предложено попробовать добавить Upload.Blocking = True, если возникла ошибка, но затем я получаю сообщение об ошибке, которое говорит, что аргумент недействителен.
Любые предложения по моей проблеме?
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