Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Daten übers LAN senden
yourmama
myCSharp.de - Member



Dabei seit:
Beiträge: 25

Themenstarter:

Daten übers LAN senden

beantworten | zitieren | melden

Habe hier ein schönes Snippet gefunden um Daten (zip, jpeg etc.) über das Netzwerk zu senden.

Das Sendescript läuft einwandfrei. Hab das mit netcat getestet
Zitat
nc -lp 8000 > datei.zip

Sendescript verbindet sich, sendet alles und nc schreibt die Datei. Dateigröße und Funktionalität sind erhalten.

Wenn ich jetzt aber das C# Empfangsscript benutze, so schreibt er mir die letzten(?) paar Bytes (?) nicht. Sprich die Datei ist um ein halbes kb kleiner, und nicht funktionsfähig.


Der Code:

public class filereceiver
    {
        string data_dir;
        public string tmp;

        TcpListener listener;

        public void fc()
        {
            data_dir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"Data");
            if (!Directory.Exists(data_dir))
                Directory.CreateDirectory(data_dir);
            listener = new TcpListener(8181);
        }

        public void Start()
        {
            fc();

            try
            {
                listener.Start();

                while (!listener.Pending())
                {
                    TcpClient client = listener.AcceptTcpClient();
                    handleClient(client);
                }
            }
            catch
            {
            }
        }

        public void Stop()
        {
            listener.Stop();
        }


        private void handleClient(TcpClient client)
        {
            NetworkStream stream = client.GetStream();
            Encoding enc = Encoding.UTF8;

            while (true)
            {
                byte[] buffer = new byte[1024];
                int read = stream.Read(buffer, 0, 1024);

                if (read == 0)
                    break;

               
                 string cmd = enc.GetString(buffer, 0, read);
                 string file = cmd.Substring(5, cmd.Length - 5);
                 file = file.Trim(new char[] { '\r', '\n' });

                 receiveFile(stream, file);

            }
            stream.Close();
            Stop();
        }

        private void receiveFile(NetworkStream stream, string filename)
        {
            data_dir += "\\" + tmp;

            using (BinaryWriter writer = new BinaryWriter(File.Create(data_dir)))
                {
                    while (true)
                    {
                        byte[] buffer = new byte[1024];
                        int read = stream.Read(buffer, 0, 1024);
                        writer.Write(buffer, 0, read);
                        if (read == 0)
                        {
                         
                            writer.Write(buffer, 0, read);
                            break;
                        }
                    }
                }
        }
    } 

Suche schon seit 3 Tagen und kann nichts finden!
Danke schonamsl!
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Hallo yourmama,

ich habe deinen Code nicht durchforstet, aber beim schnellen Überfliegen habe ich Flush nicht gefunden, eventuell löst das dein Problem.

Lion
lg Lion
private Nachricht | Beiträge des Benutzers
yourmama
myCSharp.de - Member



Dabei seit:
Beiträge: 25

Themenstarter:

beantworten | zitieren | melden

Danke für die schnelle antwort.
Könnte sowas an einem Flush liegen?
er schreibt ja eig nur das letzte byte nicht..


habe mal flush() eingebaut, aber ohne erfolg.

lg
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
Clears all buffers for the current writer and causes any buffered data to be written to the underlying device.
*klick*

Also denke ich, ja das hätte das Problem sein können, da er eventuell gebufferte Daten noch nicht geschrieben hätte.
lg Lion
private Nachricht | Beiträge des Benutzers
yourmama
myCSharp.de - Member



Dabei seit:
Beiträge: 25

Themenstarter:

beantworten | zitieren | melden

Mein Fehler!

Hatte hier einen kleinen Codefehler, und mit der Catch Methode fängt er wirklich folgenden Fehler ein:


public void Start()
        {
            fc();

            try
            {
                listener.Start();

                while (!listener.Pending())
                {
                    TcpClient client = listener.AcceptTcpClient();
                    handleClient(client);
                }
            }
            catch (Exception ab)
            {
                MessageBox.Show(ab.ToString());
            }
        }
Zitat
SystemInvalidOperationException
Not listening. You must call the Start() method before calling this method.
at System.Net.Sockets.TcpListener.Pending()

Wie behebe ich das am Besten?

Vielen Dank!
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Geschlossen wegen Crosspost.

[Hinweis] Wie poste ich richtig? Punkt 2.2
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers