Вопрос : Программировать гнезда - проблема с размером архивов полученных на слушая сервере

Здравствулте!,

We находится в процессе для того чтобы начать применение для того чтобы получить & сохранить архивы данных от наших клиентов используя гнездо программируя (клиенты нажмут архивы на поставленных IP & No порта). Мы выполняли писание Кодего стороны СЕРВЕРА для того чтобы получить архивы и это Кодий будет бежать непрерывно в слушая режиме.

вместе с применением сервера, мы также построили пробное применение КЛИЕНТА для того чтобы нажать архивы на сервере для испытание… во время отлаживать применение, мы наблюдали что оно посылает содержание вполне архива в проблеме

The одиночного командование, котор мы будем облицовкой что наше Кодий стороны СЕРВЕРА не может получить вполне содержание архивов посланных клиентом. .sometimes оно успешно в получать & хранить содержание всего архива но иногда оно не сумеет сделать так & как-то получает только частично

Pleas данных… препятствовал нам знать о проблеме в следующий Кодем -

' ---- Начните Кодего КЛИЕНТА для того чтобы нажать архивы к слушая серверу ----clientsock
Private
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
как strfileName Socket
Private как fileNameByte String
Private как fileData
Private байта () как
Private байта () fileNameLen как
Private SizeofFile байта () как ipEnd Integer
Private как arripAddress IPEndPoint
Private как portno
Private IPAddress () по мере того как btnSend_Click Integer


Protected Sub (прислужник ByVal как предмет, ByVal e как System.EventArgs) регулирует clientData btnSend.Click
Try
тусклое как clientsock
байта () = новое strfileName
гнезда (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = fileNameByte selctfile.FileName

= Encoding.ASCII.GetBytes (fileData
strfileName) = selctfile.FileBytes
fileNameLen = clientData
BitConverter.GetBytes (fileNameByte.Length) = новое clientsock
байта (4 + fileNameByte.Length + (fileData.Length - 1)) {}
fileNameByte.CopyTo
fileNameLen.CopyTo (clientData, 0) (clientData, 4)
, 4 + fileNameByte.Length) размер/>
/> «file
SizeofFile = ipEnd

clientData.Length () = новое IPEndPoint (0) arripAddress (, portno). Соедините

(ipEnd) тусклое вне как интежер = 0
вне = clientsock. Пошлите (clientData, clientData.Length, 0) clientsock

Finally
. Закройте () конец Try
End Sub

» ---- Закончите Кодего КЛИЕНТА для того чтобы нажать архивы к слушая серверу ----




' ---- Начните Кодего СЕРВЕРА для того чтобы получить архивы на слушая сервере ----именя ведущего
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

приватное как arripAddress String
приватные как strPortNo
IPAddress () приватное как portno String
приватное как ipEnd Integer
приватное как serverSock IPEndPoint
приватное как receivedPath Socket
приватное как clientSock String
приватное как clientIpEnd Socket
приватное как strClientIpAddress IPEndPoint
приватные как String
приватное, котор clientData как
байта () приватное receivedBytesLen как Integer
приватное fileNameLen как fileName Integer
приватный как strSizeofFile String
приватное как bWrite String
приватное по мере того как конец Sub


GoToListen
BinaryWriter
Sub главным образом () ()  Именя ведущего

Try

приватное Sub GoToListen () =
Dns.GetHostName () arripAddress =
Dns.GetHostAddresses (hostname) strPortNo =
System.Configuration.ConfigurationManager.AppSettings («PortNo») portno = (strPortNo) ipEnd
= новое IPEndPoint (IPAddress.Parse (arripAddress (0) .ToString ()), serverSock

portno) = новое receivedPath
гнезда (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) =
serverSock.Bind System.Configuration.ConfigurationManager.AppSettings («ReceivedFullPath») clientSock


serverSock.Listen (ipEnd) (100) = clientIpEnd

serverSock.Accept () = strClientIpAddress
clientSock.RemoteEndPoint () =

clientIpEnd.Address.ToString () «получая данные от клиента & Filename, типа так же, как размер clientData file
= новый байт (800000 до 1) {}
receivedBytesLen = 0
receivedBytesLen =
» 5
clientSock.Receive (clientData) секунды задерживают между получать содержание & пишущ они в

file
System.Threading.Thread.Sleep (5000) fileNameLen = (clientData, 0) fileName
=

Encoding.ASCII.GetString (clientData, 4, fileNameLen) «размер File
strSizeofFile = () сочинительство & сбереженияа/>
» bWrite file
= новое BinaryWriter (File.Open (receivedPath + fileName, FileMode.Create))sockException задвижки


bWrite.Write (clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen) по мере того как конец Sub
' Try
конца

GoToListen
clientSock.Close
bWrite.Close
Finally
serverSock.Close SocketException
MsgBox («ошибки в соединении» + sockException.Message) () () () () ---- Закончите Кодего СЕРВЕРА для того чтобы получить архивы на слушая сервере ----
class=

Ответ : Программировать гнезда - проблема с размером архивов полученных на слушая сервере

буфер получать слишком большой и процесс прекращает прежде чем клиент сможет поставить следующий блок данных

попытайтесь это

    Функция ReceiveData (skt ByVal как гнездо) как MemoryStream
        'создайте memorystream для того чтобы держать входящие данные
        Затемните госпожу как новое MemoryStream
        Пока поистине
            'освежите буфер
            Затемните buf = новый байт (1023) {}

            'получите некоторые данные
            Затемните br = skt. Получите (buf, buf. Длина, SocketFlags.None)

            'напишите данные в memorystream
            госпожа. Напишите (buf, 0, br)

            'если число байт более мал чем, то емкость буфера мы в конце потока
            Если br <� buf="">
            'дайте клиенту шанс послать больше данных (10 миллисекунд)
            Ждите (10)
        Закончитесь пока
        Возвратите госпожу
    Закончите функцию

    Sub ожидание (ByVal iий как интежер)
        Затемните st как новый секундомер
        st. Начните ()
        Не сделать до st. Elapsed.TotalMilliseconds > I
            Application.DoEvents ()
        Петля
        st. Остановите ()
        st = ничего
    Подводная лодка конца
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us