Questione : Programmazione dello zoccolo - problema con il formato delle lime ricevute sull'assistente d'ascolto

Ciao, il

We è in lavorazione per sviluppare un'applicazione per ricevere & immagazzinare gli schedari di dati dai nostri clienti che per mezzo dello zoccolo che programma (i clienti spingeranno le lime al IP & all'orificio forniti no.). Abbiamo completato la scrittura del codice del lato di ASSISTENTE per ricevere le lime e questo codice funzionerà continuamente nel modo d'ascolto.

con l'applicazione di assistente, inoltre abbiamo sviluppato un'applicazione di CLIENTE di prova per spingere le lime sull'assistente per la prova… durante l'eliminazione degli errori dell'applicazione, abbiamo osservato che trasmette il soddisfare della lima completa nel problema che del

The di singolo ordine siamo rivestimento siamo che il nostro codice del lato di ASSISTENTE non può ricevere il contenuto completo delle lime trasmesse dal cliente. .sometimes riesce nella ricezione & nella conservazione del soddisfare della lima intera ma a volte non riesce a agire in tal modo & in qualche modo riceve soltanto il

Pleas di dati… li ha lasciati sapere circa il problema nel seguente codice - il

' ---- Iniziare il codice di CLIENTE per spingere le lime verso l'assistente d'ascolto ----il clientsock del
Private del
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
come strfileName di Socket
Private come fileNameByte di String
Private come fileData del
Private di byte () come
Private di byte () fileNameLen come
Private SizeofFile di byte () come ipEnd di Integer
Private come arripAddress di IPEndPoint
Private come portno del
Private di IP address () mentre il btnSend_Click secondario di Integer


Protected (mittente di ByVal come oggetto, ByVal e come System.EventArgs) tratta il clientData fioco di btnSend.Click
Try
come clientsock del
di byte () = nuovo strfileName del
dello zoccolo (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = fileNameByte di selctfile.FileName

= Encoding.ASCII.GetBytes (il fileData del
dello strfileName) = selctfile.FileBytes
fileNameLen = clientData del
di BitConverter.GetBytes (fileNameByte.Length) = nuovo clientsock del
di byte (4 + fileNameByte.Length + (fileData.Length - 1)) {}
fileNameByte.CopyTo (clientData, 4)
+ fileNameByte.Length)
, 4 formato del
fileNameLen.CopyTo (clientData, 0) di/>
“di file
SizeofFile = del ipEnd del

di clientData.Length () = nuovo IPEndPoint (0) dei arripAddress (, portno). Collegare il

(del ipEnd) fioco fuori come il numero intero = 0
fuori = clientsock. Trasmettere (clientData, clientData.Length, 0) clientsock del

Finally
. Chiudere () l'estremità Try
End Sub
del
„ ---- Concludere il codice di CLIENTE per spingere le lime verso l'assistente d'ascolto ----




' ---- Iniziare il codice di ASSISTENTE per ricevere le lime sull'assistente d'ascolto ----il hostname riservato del
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

come arripAddress riservati di String
come strPortNo riservato del
di IP address () come portno riservato di String
come ipEnd riservato di Integer
come serverSock riservato di IPEndPoint
come receivedPath riservato di Socket
come clientSock riservato di String
come clientIpEnd riservato di Socket
come strClientIpAddress riservati di IPEndPoint
come String
che il clientData riservato come
di byte () riservato receivedBytesLen come Integer
riservato fileNameLen come nome di schedario riservato di Integer
come strSizeofFile riservato di String
come bWrite riservato di String
mentre estremità principale secondaria Sub
del
del
GoToListen del
di BinaryWriter
() ()  Hostname secondario riservato del

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

di portno) = nuovo receivedPath del
dello zoccolo (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = clientSock del

del
serverSock.Listen del
serverSock.Bind (ipEnd) di System.Configuration.ConfigurationManager.AppSettings (“ReceivedFullPath„) (100) = clientIpEnd del

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

di clientIpEnd.Address.ToString () “che riceve i dati dal cliente & dal nome di schedario, tipo come pure formato del clientData del file
= nuovo byte (800000 - 1) {} il
receivedBytesLen = 0
receivedBytesLen =
„ 5 del
di clientSock.Receive (clientData) i secondi fanno ritardare fra la ricezione del soddisfare & scrivendo loro nel

del file
System.Threading.Thread.Sleep (5000) fileNameLen = BitConverter.ToInt32 (clientData, 0) nome di schedario del
=

di Encoding.ASCII.GetString (clientData, il 4, fileNameLen) “formato del File
strSizeofFile = receivedBytesLen.ToString () il

„ il bWrite del file
= nuovo BinaryWriter (File.Open (receivedPath + nome di schedario, FileMode.Create))sockException del fermo del
del
del
bWrite.Write (clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen) come estremità Sub
'di Try
di conclusione del
del
GoToListen del
clientSock.Close del
bWrite.Close del
Finally
serverSock.Close di SocketException
MsgBox (“errore nel collegamento„ + sockException.Message) () () () () ---- Concludere il codice di ASSISTENTE per ricevere le lime sull'assistente d'ascolto ----
class= del

Risposta : Programmazione dello zoccolo - problema con il formato delle lime ricevute sull'assistente d'ascolto

l'amplificatore di ricezione è troppo grande ed il processo sta terminando prima che il cliente possa fornire il blocco seguente di dati

provare questo

    Funzione ReceiveData (skt di ByVal come zoccolo) come MemoryStream
        'generare un memorystream per tenere i dati ricevuti
        Oscurare la spettrografia di massa come nuovo MemoryStream
        Mentre allineare
            'rinfrescare l'amplificatore
            Oscurare il buf = nuovo byte (1023) {}

            'ricevere alcuni dati
            Oscurare il Br = lo skt. Ricevere (buf, buf. Lunghezza, SocketFlags.None)

            'redigere i dati nel memorystream
            spettrografia di massa. Scrivere (buf, 0, Br)

            'se il numero dei byte è più piccolo di il potere tampone siamo all'estremità del flusso
            Se Br <� buf="">
            'dare al cliente una probabilità inviare più dati (10 millisecondi)
            Attendere (10)
        Concluder mentre
        Restituire la spettrografia di massa
    Concludere la funzione

    Sub l'attesa (ByVal i come numero intero)
        Oscurare la st come nuovo cronometro
        st. Iniziare ()
        Fanno fino alla st Elapsed.TotalMilliseconds > la i
            Application.DoEvents ()
        Ciclo
        st. Arrestar ()
        st = niente
    Sommergibile dell'estremità
Altre soluzioni  
 
programming4us programming4us