Vraag : De Programmering van de contactdoos - Probleem met grootte van dossiers op het Luisteren Server worden ontvangen die

Hello, is

We in proces om een inschrijving te ontwikkelen om & gegevensdossiers van onze cliënten te ontvangen op te slaan die Contactdoos gebruiken programmerend (de cliënten zullen de dossiers bij geleverde IP & de Haven nr. duwen). Wij hebben het schrijven SERVER zijcode voltooid om de dossiers te ontvangen en deze code zal onophoudelijk op het luisteren wijze. lopen.

samen met de toepassing van de Server, wij ook gebouwd=hebben= een proeftoepassing van de CLIËNT om de dossiers op de server te duwen voor het testen… Tijdens het zuiveren van de toepassing, merkten wij op dat het de volledige dossierinhoud in enig bevel

The wij zijn onder ogen zien dat onze zijcode van de SERVER niet de volledige die inhoud van de dossiers kan ontvangen door de cliënt. .sometimes worden verzonden het in het ontvangen van & het opslaan van gehele dossierinhoud succesvol is maar soms er niet in slaagt het dit te doen & ontvangt op de een of andere manier slechts gedeeltelijke gegevens…

Pleas op de hoogte zijn van het probleem in de volgende code -

' De code van de CLIËNT van het begin om dossiers aan de het luisteren Server te duwen
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 als Socket
Private strfileName als String
Private fileNameByte aangezien fileData
Private van de Byte () als Byte ()
Private als Byte ()
Private SizeofFile als Integer
Private ipEnd als IPEndPoint
Private arripAddress als ()
Private portno fileNameLen IPAddress aangezien SubbtnSend_Click/>
Protected van Integer

Try
als Byte ()
clientsock = Nieuwe Contactdoos (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)
strfileName = selctfile.FileName

fileNameByte = Encoding.ASCII.GetBytes behandelt (st fileNameLen fileData/>rfileName)
= (fileNameByte.Length)
clientData BitConverter.GetBytes = Nieuwe Byte (4 + fileNameByte.Length + (fileData.Length - 1)) {}/> (clientData, 0)/> (clientData, 4)/> (clientData, 4 + fileNameByte.Length)/>
„Grootte
SizeofFile = clientData.Length ()

ipEnd = Nieuwe IPEndPoint (arripAddress (0) , portno)
clientsock. Verbind (ipEnd)

uit Schemerig als Geheel = 0
uit = clientsock. Verzend (clientData, clientData.Length, 0)

Finally
clientsock. Sluit ()
Eind Try
End Sub
“ Beëindig de code van de CLIËNT om dossiers aan de het luisteren Server te duwen




' Begin de code van de SERVER om dossiers op de het luisteren Server te ontvangen privé hostname System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

Imports System
Imports/> aangezien/> Privé arripAddress String
Privé strPortNo IPAddress als/> Privé portno String
Privé ipEnd Integer
Privé serverSock IPEndPoint
Privé receivedPath Socket
Privé clientSock String
Privé clientIpEnd Socket
Privé strClientIpAddress IPEndPoint
Privé clientData String
als Privé Integer
fileNameLen als/> Privé fileName Integer
Privé strSizeofFile String
Privé bWrite String
GoToListen ()
Eind als van BinaryWriter

Sub
 
Privé SubGoToListen ()

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

serverSock = Nieuwe Contactdoos (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 ()

de „gegevens van cliënt & Filename, type evenals grootte van file
clientData = ontvangen Nieuwe Byte (800000 - 1) {}
= 0
receivedBytesLen = clientSock.Receive (clientData)

“ de 5 secondenvertraging tussen het ontvangen van de inhoud & het schrijven van hen in file
System.Threading.Thread.Sleep (5000)

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

„Grootte van strSizeofFile File
= receivedBytesLen.ToString ()

“ & file
schrijven bewaren bWrite = Nieuwe BinaryWriter (File.Open (receivedPath + fileName, FileMode.Create))
bWrite.Write (clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen) sockException van de

Vangst als Eind van Try
MsgBox („Fout in Verbinding“ + sockException.Message)
Finally
serverSock.Close ()
bWrite.Close ()
clientSock.Close ()
GoToListen ()/>/> Sub
' De code van de SERVER van het eind om dossiers op de het luisteren Server te ontvangen

Antwoord : De Programmering van de contactdoos - Probleem met grootte van dossiers op het Luisteren Server worden ontvangen die

ontvang buffer is te groot en het proces eindigt alvorens de cliënt het volgende blok van gegevens kan leveren

probeer dit

    Functie ReceiveData (ByVal skt als Contactdoos) als MemoryStream
        'cre�ër een memorystream om de inkomende gegevens te houden
        Verduister Mej. als Nieuwe MemoryStream
        Terwijl Waar
            'verfris de buffer
            Verduister buf = Nieuwe Byte (1023) {}

            'ontvang sommige gegevens
            Verduister br = skt. Ontvang (buf, buf. Lengte, SocketFlags.None)

            'schrijf de gegevens in memorystream
            Mej. Schrijf (buf, 0, br)

            'als het aantal bytes kleiner is dan de buffercapaciteit zijn wij aan het eind van de stroom
            Als br <� buf="">
            'geef de cliënt een kans om meer gegevens (10 milliseconden) te verzenden
            Wacht (10)
        Beëindig terwijl
        Keer Mej. terug
    Beëindig Functie

    Sub wacht (ByVal i als Geheel)
        Verduister st als Nieuwe Chronometer
        st. Begin ()
        Doe tot st. Elapsed.TotalMilliseconds > I
            Application.DoEvents ()
        Lijn
        st. Einde ()
        st = niets
    Sub van het eind
Andere oplossingen  
 
programming4us programming4us