Pytanie : Gniazdkowy Programowanie - Problem z rozmiar kartoteka otrzymywać na Słuchający Serwer

Cześć,

We być w proces zastosowanie & dane kartoteka od nasz klient Gniazdkowy programowanie (the klient pchać the kartoteka przy the dostarczony IP & Przesyłać nie.). My uzupełniać pisać SERWER strona kod the kartoteka i ten kod biegać stale w słuchający tryb.

Wraz z the Serwer zastosowanie, my także budować próbny KLIENT zastosowanie the kartoteka na the serwer dla testowanie… Podczas debugging the zastosowanie, my obserwować że ono wysyłać the zupełny kartoteka zawartość w pojedynczy rozkaz

The problem my stawiać czoło być że nasz SERWER strona kod być sprawnie the zupełny zawartość the kartoteka wysyłać the klient. .sometimes ono być pomyślny w dostawanie & magazynowanie cały kartoteka zawartość ale czasem ono nie udać się w ten sposób & jakoś otrzymywać tylko częściowy dane…

Pleas pozwalać o the problem w the następujący kod -

' ---- Zaczynać KLIENT kod kartoteka the słuchający Serwer ----
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

Private clientsock Jako Socket
Private strfileName Jako String
Private fileNameByte Jako Bajt ()
Private fileData Jako Bajt ()
Private fileNameLen Jako Bajt ()
Private SizeofFile Jako Integer
Private ipEnd Jako IPEndPoint
Private arripAddress Jako IPAddress ()
Private portno Gdy Integer


Protected Okręt podwodny btnSend_Click (ByVal nadawca Jako Przedmiot, ByVal e Jako System.EventArgs) Rękojeść btnSend.Click
Try
Ćmić clientData Jako Bajt ()
clientsock = Nowy Gniazdkowy (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
strfileName = selctfile.FileName

fileNameByte = Encoding.ASCII.GetBytes (strfileName)
fileData = selctfile.FileBytes
fileNameLen = BitConverter.GetBytes (fileNameByte.Length)
clientData = Nowy Bajt (4 + fileNameByte.Length + (fileData.Length - 1)) {}
fileNameLen.CopyTo (clientData, (0))
fileNameByte.CopyTo (clientData, 4)
fileData.CopyTo (clientData, 4 + fileNameByte.Length)

"Rozmiar file
SizeofFile = clientData.Length ()

ipEnd = Nowy IPEndPoint (arripAddress ((0)) , portno)
clientsock. Łączyć (ipEnd)

Ciemnawy ciemnawy Jako Integer = 0
ciemnawy = clientsock. Wysyłać (clientData, clientData.Length, (0))

Finally
clientsock. Zamykać ()
Końcówka Try
End Sub
" ---- Kończyć KLIENT kod kartoteka the słuchający Serwer ----




' ---- Zaczynać SERWER kod kartoteka na the słuchający Serwer ----
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

Intymny hostname Jako String
Intymny arripAddress Jako IPAddress ()
Intymny strPortNo Jako String
Intymny portno Jako Integer
Intymny ipEnd Jako IPEndPoint
Intymny serverSock Jako Socket
Intymny receivedPath Jako String
Intymny clientSock Jako Socket
Intymny clientIpEnd Jako IPEndPoint
Intymny strClientIpAddress Jako String
Intymny clientData Jako Bajt ()
Intymny receivedBytesLen Jako Integer
Intymny fileNameLen Jako Integer
Intymny fileName Jako String
Intymny strSizeofFile Jako String
Intymny bWrite Gdy BinaryWriter

Okręt podwodny Główny ()
GoToListen ()
Końcówka Sub
 
Intymny Okręt podwodny GoToListen ()

Try
hostname = Dns.GetHostName ()
arripAddress = Dns.GetHostAddresses (hostname)
strPortNo = System.Configuration.ConfigurationManager.AppSettings ("PortNo")
portno = Convert.ToInt64 (strPortNo)
ipEnd = Nowy IPEndPoint (IPAddress.Parse (arripAddress ((0)) .ToString ()), portno)

serverSock = Nowy Gniazdkowy (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
receivedPath = System.Configuration.ConfigurationManager.AppSettings ("ReceivedFullPath")
serverSock.Bind (ipEnd)
serverSock.Listen (100)

clientSock = serverSock.Accept ()

clientIpEnd = clientSock.RemoteEndPoint ()
strClientIpAddress = clientIpEnd.Address.ToString ()

"The dane od klient & Filename, typ as well as rozmiar file
clientData = Nowy Bajt (800000 - 1) {}
receivedBytesLen = 0
receivedBytesLen = clientSock.Receive (clientData)

" 5 sekunda opóźniać między the zawartość & pisać w file
System.Threading.Thread.Sleep (5000)

fileNameLen = BitConverter.ToInt32 (clientData, (0))
fileName = Encoding.ASCII.GetString (clientData, 4, fileNameLen)

"Rozmiar the File
strSizeofFile = receivedBytesLen.ToString ()

" Writing & oszczędzanie the file
bWrite = Nowy BinaryWriter (File.Open (receivedPath + fileName, FileMode.Create))
bWrite.Write (clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen)

Chwyt sockException Gdy SocketException
MsgBox ("Błąd w Związek" + sockException.Message)
Finally
serverSock.Close ()
bWrite.Close ()
clientSock.Close ()
GoToListen ()
Końcówka Try
Końcówka Sub
' ---- Końcówka SERWER kod kartoteka na the słuchający Serwer ----

Odpowiedź : Gniazdkowy Programowanie - Problem z rozmiar kartoteka otrzymywać na Słuchający Serwer

the otrzymywać odbojnica być zbyt duży i the proces kończyć zanim the klient móc the następny blok dane

próbować to

    Funkcja ReceiveData (ByVal skt Jako Nasadka) Jako MemoryStream
        'tworzyć memorystream the przybywający dane
        Ćmić ms Jako Nowy MemoryStream
        Podczas Gdy Prawdziwy
            'odświeżać the odbojnica
            Ćmić buf = Nowy Bajt (1023) {}

            'otrzymywać niektóre dane
            Ćmić br = skt. Otrzymywać (buf, buf. Długość, SocketFlags.None)

            'pisać the dane w the memorystream
            ms. Pisać (buf, (0), br)

            'jeżeli the liczba bajt być mały the tłumiący pojemność my być przy the końcówka the strumień
            Jeżeli br <� buf="">
            'dawać the klient szansa więcej dane (10 milliseconds)
            Czekać (10)
        Kończyć Podczas Gdy
        Wracać ms
    Kończyć Funkcja

    Okręt podwodny Czekanie (ByVal i Jako Integer)
        Ciemnawy st Jako Nowy Stopwatch
        st. Zaczynać ()
        Do St. Elapsed.TotalMilliseconds > i
            Application.DoEvents ()
        Pętla
        st. Przerwa ()
        st = Nic
    Końcówka Okręt podwodny
Inne rozwiązania  
 
programming4us programming4us