Question : Programmation de douille - problème avec la taille des dossiers reçus sur le serveur de écoute

Bonjour, le

We sont dans le processus pour développer une application pour recevoir et stocker des fichiers de données de nos clients à l'aide de la douille programmant (les clients pousseront les dossiers à l'IP et au numéro fournis de port). Nous avons accompli écrire le code de côté de SERVEUR pour recevoir les dossiers et ce code fonctionnera sans interruption en mode de écoute. le

avec l'application de serveur, nous avons également établi une application de CLIENT d'essai pour pousser les dossiers sur le serveur pour l'essai… pendant la correction de l'application, nous avons observé qu'elle envoie le contenu de fichier complet dans le problème du

The de commande simple que nous sommes revêtement est que notre code de côté de SERVEUR ne peut pas recevoir le contenu complet des dossiers envoyés par le client. .sometimes il est réussi en recevant et en stockant le contenu de dossier entier mais parfois il ne fait pas ainsi et reçoit de façon ou d'autre seulement le

Pleas de données… nous a faits savoir le problème dans le code suivant - le

' ---- Commencer le code de CLIENT pour pousser des dossiers au serveur de écoute ----le clientsock du
Private du
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
comme strfileName de Socket
Private comme fileNameByte de String
Private en tant que fileData du
Private de byte () comme
Private de byte () fileNameLen comme
Private SizeofFile de byte () comme ipEnd d'Integer
Private comme arripAddress d'IPEndPoint
Private en tant que portno du
Private d'IP address () pendant que le btnSend_Click secondaire d'Integer


Protected (expéditeur de ByVal comme objet, ByVal e comme System.EventArgs) manipule le faible clientData de btnSend.Click
Try
en tant que clientsock du
de byte () = nouveau strfileName du
de la douille (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = fileNameByte de selctfile.FileName

= Encoding.ASCII.GetBytes (le fileData du
du strfileName) = les selctfile.FileBytes
fileNameLen = clientData du
de BitConverter.GetBytes (fileNameByte.Length) = nouveau clientsock du
du byte (4 + fileNameByte.Length + (fileData.Length - 1)) {} le
fileNameByte.CopyTo (clientData, 4)
, 4 + fileNameByte.Length) taille du
fileNameLen.CopyTo (clientData, 0) de/>
/> « de file
SizeofFile = d'ipEnd de

de clientData.Length () = nouvel IPEndPoint 0) (d'arripAddress (, portno). Relier le

(d'ipEnd) faible dehors comme nombre entier = 0
dehors = clientsock. Envoyer (clientData, clientData.Length, 0) clientsock du

Finally
. Fermer () l'extrémité Try
End Sub
du
 » ---- Finir le code de CLIENT pour pousser des dossiers au serveur de écoute ----




' ---- Commencer le code de SERVEUR pour recevoir des dossiers sur le serveur de écoute ----le hostname privé du
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

comme arripAddress privés de String
en tant que strPortNo privé du
d'IP address () comme portno privé de String
comme ipEnd privé d'Integer
comme serverSock privé d'IPEndPoint
comme receivedPath privé de Socket
comme clientSock privé de String
comme clientIpEnd privé de Socket
comme strClientIpAddress privés d'IPEndPoint
comme String
le clientData que privé comme
de byte () privé receivedBytesLen comme Integer
privé fileNameLen comme nom de fichier privé d'Integer
comme strSizeofFile privé de String
comme bWrite privé de String
pendant qu'extrémité principale secondaire Sub
du
du
GoToListen du
de BinaryWriter
() ()  Hostname secondaire privé du

Try
du
GoToListen () = arripAddress de
de Dns.GetHostName () = strPortNo de
de Dns.GetHostAddresses (hostname) = portno de
de System.Configuration.ConfigurationManager.AppSettings (« PortNo ») = ipEnd du
= nouvel IPEndPoint (IPAddress.Parse (arripAddress (0) .ToString ()), serverSock du

de portno) = nouveau receivedPath du
de la douille (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = clientSock du

du
serverSock.Listen de
serverSock.Bind (ipEnd) de System.Configuration.ConfigurationManager.AppSettings (« ReceivedFullPath ») (100) = clientIpEnd du

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

de clientIpEnd.Address.ToString () « recevant les données du client et du nom de fichier, type comme la taille du clientData du file
= nouveau byte (800000 - 1) {} le
receivedBytesLen = 0
receivedBytesLen = le
 » 5 du
de clientSock.Receive (clientData) les secondes retardent entre recevoir le contenu et écrivant ils dans le

du file
System.Threading.Thread.Sleep (5000) fileNameLen = (clientData, 0) nom de fichier du
=

d'Encoding.ASCII.GetString (le clientData, le 4, fileNameLen) « taille du File
strSizeofFile = () écriture et économie de/>
 » le bWrite du file
= nouveau BinaryWriter (File.Open (receivedPath + nom de fichier, FileMode.Create))sockException de crochet du
du
du
bWrite.Write (le clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen) comme extrémité Sub
'de Try
de fin du
du
GoToListen du
clientSock.Close du
bWrite.Close du
Finally
serverSock.Close de SocketException
MsgBox (« erreur dans le raccordement » + sockException.Message) () () () () ---- Finir le code de SERVEUR pour recevoir des dossiers sur le serveur de écoute ----
class= de

Réponse : Programmation de douille - problème avec la taille des dossiers reçus sur le serveur de écoute

l'amortisseur de réception est trop grand et le processus se termine avant que le client puisse fournir le prochain bloc de données

essayer ceci

    Fonction ReceiveData (skt de ByVal comme douille) comme MemoryStream
        'créer un memorystream pour contenir les données entrantes
        Obscurcir Mme en tant que nouveau MemoryStream
        Tandis que vrai
            'régénérer l'amortisseur
            Obscurcir le buf = le nouveau byte (1023) {}

            'recevoir quelques données
            Obscurcir le Br = le skt. Recevoir (buf, buf. Longueur, SocketFlags.None)

            'écrire les données dans le memorystream
            Mme. Écrire (buf, 0, Br)

            'si le nombre de bytes est plus petit que le pouvoir tampon nous sommes à la fin du jet
            Si Br <� buf="">
            'donner au client une chance d'envoyer plus de données (10 millisecondes)
            Attendre (10)
        Finir tandis que
        Retourner Mme
    Finir la fonction

    Substrater l'attente (ByVal i comme nombre entier)
        Obscurcir la rue en tant que nouveau chronomètre
        rue. Commencer ()
        Font jusqu'à la rue Elapsed.TotalMilliseconds > I
            Application.DoEvents ()
        Boucle
        rue. Arrêter ()
        rue = rien
    Sous-marin d'extrémité
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us