Microsoft
Software
Hardware
Network
Frage : Einfaßungs-Programmierung - Problem mit Größe der Akten empfangen auf hörendem Bediener
Hallo, sind
We im Prozess, zum einer Anwendung zu entwickeln, um Dateien von unseren Klienten zu empfangen u. zu speichern, welche die programmierende Einfaßung verwenden (die Klienten drücken die Akten am gelieferten IP u. am Hafen Nr.). Wir haben das Schreiben des BEDIENER-Seitencodes abgeschlossen, um die Akten zu empfangen und dieser Code wird ununterbrochen in hörenden Modus. laufen.
zusammen mit der Bedieneranwendung, haben wir auch eine Probe-KLIENTEN-Anwendung aufgebaut, um die Akten auf dem Bediener für Prüfung… während des Ausprüfens der Anwendung zu drücken, beobachteten wir, dass sie den Inhalt der kompletten Akte einziger Befehl
The im Problem sendet, das wir Einfassung sind sind, dass unser BEDIENER-Seitencode nicht in der Lage ist, den kompletten Inhalt der Akten zu empfangen, die vom Klienten. .sometimes gesendet werden er erfolgreich ist, wenn er Inhalt der vollständigen Akte empfängt u. speichert, aber manchmal er so tun nicht kann u. irgendwie nur teilweises Daten…
Pleas informierte uns über das Problem im Folgenden Code -
' empfängt ---- KLIENTEN-Code beginnen, um Akten zum hörenden Bediener zu drücken ----
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 als Byte ()
Private fileData als Byte ()
Private fileNameLen als Byte ()
Private SizeofFile als Integer
Private ipEnd als IPEndPoint
Private arripAddress als IP address ()
Private portno, während Integer
Protected VorbtnSend_Click (ByVal Absender als Gegenstand, ByVal e als System.EventArgs) btnSend.Click
Try
schwaches clientData als Byte ()
clientsock = neues Einfaßung (AddressFamily.Inter
Network, So
cketType.S
tream, ProtocolType.IP)
strfileName = selctfile.FileName
fileNameByte = Encoding.ASCII.GetBytes behandelt (st
rfileName)
fileData = selctfile.FileBytes
fileNameLen = BitConverter.GetBytes (file
NameByte.L
ength)
clientData = neues Byte (4 + fileNameByte.Length + (fileData.Length - 1)) {}
fileNameLen.CopyTo (clientD
ata, 0)
fileNameByte.CopyTo (client
Data, 4)
, 4 + fileNameByte.Length)/>
/> „Größe von file
SizeofFile = clientData.Length ()
von ipEnd = neues IPEndPoint (arripAddress (0)
, portno)
clientsock. (ipEnd) das
heraus anschließen schwach als ganze Zahl = 0
heraus = clientsock. Senden (clientData
, clientData.Length, 0)
Finally
clientsock. ()
Ende Try
End Sub
schließen“ ---- KLIENTEN-Code beenden, um Akten zum hörenden Bediener zu drücken ----
' ---- BEDIENER-Code beginnen, um Akten auf dem hörenden Bediener zu empfangen ----
Imports System
Imports System.Collections.Generic
Imports System.Net
Imports System.Net.Dns
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
privates hostname als String
private arripAddress als IP address ()
privates strPortNo als String
privates portno als Integer
privates ipEnd als IPEndPoint
privates serverSock als Socket
privates receivedPath als String
privates clientSock als Socket
privates clientIpEnd als IPEndPoint
private strClientIpAddress als String
, das privates clientData als Byte ()
, das privat ist, als privates Integer
receivedBytesLen, fileNameLen als Integer
privater Dateiname als String
privates strSizeofFile als String
privates bWrite während BinaryWriter
Vorhaupt ()
GoToListen ()
Ende Sub
privates VorGoToListen ()
Try
hostname = Dns.GetHostName ()
arripAddress = Dns.GetHostAddresses (hostn
ame)
strPortNo = System.Configuration.Confi
gurationMa
nager.AppS
ettings („P
ortNo“)
portno =
ipEnd = neues IPEndPoint (IPAddress.Parse
(arripAddr
ess (0) .ToS
tring ()), portno)
serverSock = neues Einfaßung (AddressFamily.Inter
Network, So
cketType.S
tream, ProtocolType.IP)
receivedPath = System.Configuration.Confi
gurationMa
nager.AppS
ettings („R
eceivedFul
lPath“)
serverSock.Bind (ipEnd)
serverSock.Listen (100)
clientSock = serverSock.Accept ()
clientIpEnd = clientSock.RemoteEndPoint (
)
strClientIpAddress = clientIpEnd.Address.ToStri
ng ()
„die Daten vom Klienten u. vom Dateinamen, Art empfangend sowie Größe von file
clientData = neues Byte (800000 - 1) {} receivedBytesLen
= 0
receivedBytesLen = clientSock.Receive (clientD
ata)
“ 5 Sekunden verzögern zwischen dem Empfangen des Inhalts u. schreibend fileNameLen sie in file
System.Threading.Thread.Sl
eep (5000)
= (clien
tData, 0)
Dateiname = Encoding.ASCII.GetString (c
lientData,
4, fileNameLen),
„Größe des strSizeofFile File
= (
)/>
“ Schreiben u. Einsparung das file
bWrite = neues BinaryWriter (File.Open (rec
eivedPath + Dateiname, FileMode.Create))
bWrite.Write (clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen),
Fang sockException wie SocketException
MsgBox („Störung im Anschluss“ + sockException.Message)
Finally
serverSock.Close ()
bWrite.Close ()
clientSock.Close ()
GoToListen ()
Ende Try
Ende Sub
' ---- BEDIENER-Code beenden, um Akten auf dem hörenden Bediener zu empfangen ----
Antwort : Einfaßungs-Programmierung - Problem mit Größe der Akten empfangen auf hörendem Bediener
der empfangenpuffer ist zu groß und der Prozess beendet, bevor der Klient den folgenden Block von Daten liefern kann
dieses versuchen
Funktion ReceiveData (ByVal skt als Einfaßung) als MemoryStream
'ein memorystream verursachen, um die ankommenden Daten zu halten
Frau als neues MemoryStream verdunkeln
Wenn zutreffend
'den Puffer erneuern
Buf verdunkeln = neues Byte (1023) {}
'etwas Daten empfangen
Br = skt verdunkeln. Empfangen (buf, buf. Länge, SocketFlags.None)
'die Daten in das memorystream schreiben
Frau. Schreiben (buf, 0, Br)
'wenn die Zahl Bytes kleiner als ist, die Dämpfungsfähigkeit sind wir am Ende des Stromes
Wenn Br <� buf="">
'dem Klienten eine Wahrscheinlichkeit geben, mehr Daten (10 Millisekunden) zu senden
Warten (10)
Beenden während
Frau zurückbringen
Funktion beenden
Sub Wartezeit (ByVal I als ganze Zahl)
Str. als neue Stoppuhr verdunkeln
Str. Beginnen ()
Bis Str. tun Elapsed.TotalMilliseconds
> i
Application.DoEvents ()
Schleife
Str. Stoppen ()
Str. = nichts
Enden-Unterseeboot
Weitere Lösungen
Wort-Presse, die Frage bewirtet
asp.net: Mein Problem ist, benutze ich einen ajax Ergänzung Kalender, um BeginDate u. EndDate Werte einzutragen
Silverlight 4 UI Ereignisse
wie kann ich irgendeine Bildentschließung online ändern und sie zum lokalen PC dann innen sparen??
ZFS Sicherungshilfe Ubuntu 10.0.4 LTS
Form-Frage für Kristallreports
Betreffend INOTES in Lotos 8.5
Mühen, die ZWISCHEN Logik erhalten zu arbeiten
Spannungs-Sensor ermittelte einen Ausfall auf Bediener DELL-PowerEdge 2650
broadcom NIC teaming