Cuestión : Programación del zócalo - problema con el tamaño de los archivos recibidos en el servidor que escucha

Hola, el

We está en el proceso para desarrollar un uso para recibir y para almacenar ficheros de datos de nuestros clientes que usan el zócalo que programa (los clientes empujarán los archivos en el IP y el puerto suministrados No.). Hemos terminado la escritura de código del lado de SERVIDOR para recibir los archivos y este código funcionará continuamente en modo que escucha. el

junto con el uso de servidor, también hemos construido un uso de CLIENTE de ensayo para empujar los archivos en el servidor para la prueba… durante la eliminación de errores del uso, observamos que envía el contenido del archivo completo en problema del

The del solo comando que somos revestimiento somos que nuestro código del lado de SERVIDOR no puede recibir el contenido completo de los archivos enviados por el cliente. .sometimes es acertado en la recepción y almacenar de contenido del archivo entero pero no puede a veces hacer tan y recibe de alguna manera solamente el

Pleas de los datos… nos dejó saber sobre el problema en el código siguiente -

' ---- Comenzar el código de CLIENTE para empujar archivos al servidor que escucha ----el 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
como strfileName de Socket
Private como fileNameByte de String
Private como fileData del
Private del octeto () como
Private del octeto () fileNameLen como
Private SizeofFile del octeto () como ipEnd de Integer
Private como arripAddress de IPEndPoint
Private como portno del
Private del IP address () mientras que el btnSend_Click secundario de Integer


Protected (remitente de ByVal como objeto, ByVal e como System.EventArgs) dirige clientData dévil de btnSend.Click
Try
como clientsock del
del octeto () = nuevo strfileName del
del zócalo (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = fileNameByte de selctfile.FileName

= Encoding.ASCII.GetBytes (el fileData del
del strfileName) = selctfile.FileBytes
fileNameLen = clientData del
de BitConverter.GetBytes (fileNameByte.Length) = nuevo clientsock del
del octeto (4 + fileNameByte.Length + (fileData.Length - 1)) {} el
fileNameByte.CopyTo (clientData, 4)
, 4 + fileNameByte.Length) tamaño del
fileNameLen.CopyTo (clientData, 0) de/>
/> “del file
SizeofFile = del ipEnd del

de clientData.Length () = nuevo IPEndPoint 0) (de los arripAddress (, portno). Conectar el

(del ipEnd) dévil hacia fuera como el número entero = 0
hacia fuera = clientsock. Enviar (clientData, clientData.Length, 0) clientsock del

Finally
. Cerrar () el extremo Try
End Sub
del
” ---- Terminar el código de CLIENTE para empujar archivos al servidor que escucha ----




' ---- Comenzar el código de SERVIDOR para recibir archivos en el servidor que escucha ----el hostname privado del
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text

como arripAddress privados de String
como strPortNo privado del
del IP address () como portno privado de String
como ipEnd privado de Integer
como serverSock privado de IPEndPoint
como receivedPath privado de Socket
como clientSock privado de String
como clientIpEnd privado de Socket
como strClientIpAddress privados de IPEndPoint
como String
que el clientData privado como
del octeto () privado receivedBytesLen como Integer
privado fileNameLen como nombre de fichero privado de Integer
como strSizeofFile privado de String
como bWrite privado de String
mientras que extremo principal secundario Sub
del
del
GoToListen del
de BinaryWriter
() ()  Hostname secundario privado del

Try
del
GoToListen () = arripAddress del
de Dns.GetHostName () = strPortNo del
de Dns.GetHostAddresses (hostname) = portno del
de System.Configuration.ConfigurationManager.AppSettings (“PortNo”) = ipEnd del
= nuevo IPEndPoint (IPAddress.Parse (arripAddress (0) .ToString ()), serverSock del

del portno) = nuevo receivedPath del
del zócalo (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP) = clientSock del

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

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

de clientIpEnd.Address.ToString () “que recibe los datos del cliente y del nombre de fichero, tipo tan bien como el tamaño del clientData del file
= nuevo octeto (800000 - 1) {} el
receivedBytesLen = 0
receivedBytesLen = el
” 5 del
de clientSock.Receive (clientData) los segundos retrasan entre la recepción del contenido y escribiendo él en el

del file
System.Threading.Thread.Sleep (5000) fileNameLen = (clientData, 0) nombre de fichero del
= el

de Encoding.ASCII.GetString (el clientData, 4, fileNameLen) “tamaño del File
strSizeofFile = () escritura y ahorro de/>
” el bWrite del file
= nuevo BinaryWriter (File.Open (receivedPath + el nombre de fichero, FileMode.Create))sockException del retén del
del
del
bWrite.Write (el clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen) como extremo Sub
' de Try
del final del
del
GoToListen del
clientSock.Close del
bWrite.Close del
Finally
serverSock.Close de SocketException
MsgBox (“error en la conexión” + sockException.Message) () () () () ---- Terminar el código de SERVIDOR para recibir archivos en el servidor que escucha ----
class= del

Respuesta : Programación del zócalo - problema con el tamaño de los archivos recibidos en el servidor que escucha

el almacenador intermediario de la recepción es demasiado grande y el proceso está terminando antes de que el cliente pueda suministrar el bloque siguiente de datos

intentar esto

    Función ReceiveData (skt de ByVal como zócalo) como MemoryStream
        'crear un memorystream para llevar a cabo los datos entrantes
        Amortiguar a ms como nuevo MemoryStream
        Mientras que es verdad
            'restaurar el almacenador intermediario
            Amortiguar el buf = el nuevo octeto (1023) {}

            'recibir un ciertos datos
            Amortiguar el Br = el skt. Recibir (buf, buf. Longitud, SocketFlags.None)

            'escribir los datos en el memorystream
            ms. Escribir (buf, 0, Br)

            'si el número de octetos es más pequeño que la capacidad tapón estamos en el extremo de la corriente
            Si Br <� buf="">
            'dar a cliente una oportunidad de enviar más datos (10 milisegundos)
            Esperar (10)
        Terminar mientras que
        Volver a ms
    Terminar la función

    Sub la espera (ByVal i como número entero)
        Amortiguar el st como nuevo cronómetro
        st. Comenzar ()
        Hacen hasta el St. Elapsed.TotalMilliseconds > i
            Application.DoEvents ()
        Lazo
        st. Parar ()
        st = nada
    Submarino del extremo
Otras soluciones  
 
programming4us programming4us