Fråga : Hålighet som programmerar - problemet med storleksanpassar av sparar mottaget på den lyssnande serveren

Hälsningar

We är i processaa som framkallar en applikation för att motta & lagra datafiler från våra beställare using håligheten som programmerar (de ska beställarna skjuter sparar på den levererade IPEN & den Port nr.en.). Vi har avslutat handstilSERVERsidan kodifierar för att motta sparar, och denna kodifierar ska är rinnande fortlöpande i lyssnande funktionsläge.

tillsammans med serverapplikationen, har vi också byggt en försökBESTÄLLAREapplikation för att skjuta sparar på serveren för att testa… under fe av applikationen för fel, vi observerade att den överför det färdigt sparar tillfredsställer i singel befaller problem för

The som vi vänder mot är att vår SERVERsida kodifierar inte är kompetent att motta det färdigt tillfredsställer av sparar överfört av beställaren. .sometimes den är lyckad i häleri & att lagra som är helt sparar tillfredsställer men den missar ibland för att göra så & mottar somehow endast partisk data…

Pleas l5At oss veta om problemet i efter kodifiera -

' ---- StartBESTÄLLAREN kodifierar för att skjuta sparar till den lyssnande serveren ----clientsock för
Private för
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
som Socket
Private strfileName som String
Private fileNameByte som fileData för
Private för byte () som
Private för byten () fileNameLen som
Private SizeofFile för byten () som Integer
Private ipEnd som IPEndPoint
Private arripAddress som portno för
Private för IP address (), som Integer


Protected underbtnSend_Click (den ByVal avsändaren som anmärker, ByVal e som System.EventArgs) behandlar dunkel clientData för btnSend.Click
Try
som clientsock för
för byte () = ny strfileName för
för håligheten (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = fileNameByte för selctfile.FileName

= Encoding.ASCII.GetBytes (fileDataen för
för strfileName) = selctfile.FileBytes
fileNameLen = clientDataen för
för BitConverter.GetBytes (fileNameByte.Length) = ny byte (4 + fileNameByte.Length + (fileData.Length - 1)) {}

för
fileData.CopyTo (clientData, 4 för
fileNameByte.CopyTo (clientData, 4) för
fileNameLen.CopyTo (clientData, 0) + fileNameByte.Length) ”storleksanpassar av file
SizeofFile = ipEnd för

för clientData.Length () = ny clientsock för IPEndPoint 0) (för arripAddress (, portnoen)
. Förbind

som (för ipEnd) är dunkel ut som heltalet = 0
ut = clientsock. Överför (clientData, clientData.Length, 0) clientsock för

Finally
. Nära ()
avslutar Try
End Sub
”, ---- Avsluta BESTÄLLAREN kodifierar för att skjuta sparar till den lyssnande serveren ----




' ---- Starta SERVEREN för att kodifiera för att motta sparar på den lyssnande serveren ----den privata hostnamen för
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

som String
privata arripAddress som strPortNo för
för IP address () privat som String
den privata portnoen som Integer
privat ipEnd som IPEndPoint
privat serverSock som Socket
privat receivedPath som String
privat clientSock som Socket
privat clientIpEnd som IPEndPoint
privata strClientIpAddress som String
som den privata clientDataen som privat
för byten () receivedBytesLen som privata Integer
, fileNameLen som Integer
den privata fileNamen som String
privat strSizeofFile som String
privat bWrite, som
för
GoToListen för BinaryWriter

underhuvudsaklig () () avslutar Sub
  Hostname för

Try
för
privat underGoToListen () = för
för Dns.GetHostName () arripAddress = för
för Dns.GetHostAddresses (hostname) strPortNo = för
för System.Configuration.ConfigurationManager.AppSettings (”PortNo”) portno = (strPortNoen) ipEnd för
= nya IPEndPoint (IPAddress.Parse (arripAddress (0) .ToString ()), serverSock för

för portnoen) = ny receivedPath för
för håligheten (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = för
serverSock.Bind (ipEnd) för System.Configuration.ConfigurationManager.AppSettings (”ReceivedFullPath”) clientSock för

för
serverSock.Listen (100) = clientIpEnd för

för serverSock.Accept () = strClientIpAddress för
för clientSock.RemoteEndPoint () =

”häleri för clientIpEnd.Address.ToString () datan från beställare & Filename, skrivar, såväl som storleksanpassa av clientData för file
= ny
för byte (800000 - 1) {} receivedBytesLen = 0
receivedBytesLen =
för
för clientSock.Receive (clientData)”, 5 understöder fördröjning mellan det hälerit tillfredsställer, & handstil som de i

för file
System.Threading.Thread.Sleep (5000) fileNameLen = (clientData, 0) fileNamen för
=

för Encoding.ASCII.GetString (clientData, 4, fileNameLen), ”storleksanpassa av den strSizeofFile File = () handstil & besparingen för/>
” bWriten för file
= nya BinaryWriter (File.Open (receivedPath + fileNamen, FileMode.Create))
för
för
bWrite.Write (clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen), fångar sockException, som
för
GoToListen för
clientSock.Close för
bWrite.Close för SocketException
MsgBox (”fel i anslutning” + sockException.Message)
Finally
serverSock.Close () () () () avslutar Try
avslutar Sub
' ---- Avsluta SERVEREN kodifierar för att motta sparar på den lyssnande serveren ----
" klar "

Svar : Hålighet som programmerar - problemet med storleksanpassar av sparar mottaget på den lyssnande serveren

motta fungera som buffert är för stor, och det processaa avslutar, för beställaren kan leverera det nästa kvarteret av data

försök detta

    Fungera ReceiveData (ByVal skt som håligheten) som MemoryStream
        'skapa en memorystream för att rymma de inkomma datan
        Dunkel ms som nya MemoryStream
        Riktiga stunder
            'förnya fungera som buffert
            Dunkel buf = ny byte (1023) {}

            'motta några data
            Dunkel br = skt. Motta (buf, buf. Längd SocketFlags.None)

            'skriv datan in i memorystreamen
            ms. Skriv (buf, 0, br)

            'om numrera av byte är mindre än, fungera som buffertkapaciteten vi är på avsluta av strömma
            Om br <� buf="">
            'ge beställaren en riskera för att överföra mer data (10 millisekunder)
            Väntan (10)
        Avsluta stunder
        Gå msen tillbaka
    Avsluta fungerar

    Sub väntan (ByVal i som heltal)
        Dunkel st som den nya stopwatchen
        st. Starta ()
        Gör till St. Elapsed.TotalMilliseconds > I
            Application.DoEvents ()
        Kretsa
        st. Stoppa ()
        st = ingenting
    Avsluta suben
Andra lösningar  
 
programming4us programming4us