Ankündigung

Einklappen
Keine Ankündigung bisher.

C# TCP Senden/Empfangen

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • C# TCP Senden/Empfangen

    Hallo zusammen,
    ich bin neu hier weil ich ein Problem mit meinem kleinen Projekt habe. Es geht darum, Bilder von einer Kamera per TCP zu versenden.
    Die Kamera löst mit 8FPS auf, daher das
    Code:
    Thread.Sleep(125)
    .
    Hier ist der Code des Senders:

    Code:
                         while(true)
                        {
                            TcpClient client = server.AcceptTcpClient();
                            Console.WriteLine("Client connected!");
                            while(client.Connected)
                            {
                                NetworkStream nStream = client.GetStream();
    
                                while(true)
                                {
                                    Image image = GetImage();
                                    byte[] array = ImageToByteArray(image);
                                    nStream.Write(array, 0, array.Length);
                                    Console.WriteLine("Sent " + array.Length + " bytes");
                                    Thread.Sleep(125);
                                }
                            }
                        }
    Das funktioniert soweit, nun möchte ich den Code empfangen:

    Code:
     IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
                TcpClient client = new TcpClient();
    
                client.Connect(ipAddress, 1234);
                NetworkStream nNetStream = client.GetStream();
    
                while (client.Connected)
                {              
                    int i = 0; ;
                    if (nNetStream.CanRead)
                    {
                        byte[] bytes = new byte[client.SendBufferSize];
                        nNetStream.Read(bytes, 0, (int)bytes.Length);
                        Image returnImage = Image.FromStream(nNetStream);
                        Console.WriteLine("received " + bytes.Length  + " bytes");
                    }
                    else
                    {
                        client.Close();
                        nNetStream.Close();
                    }
                }
                client.Close();
            }
    Mein Problem: Ein gesendetes Bild hat knapp über 1MB. Wie kann ich dieses Bild auf der Empfängerseite vollständig empfangen? Das einzige, was ich auf der Empfängerseite kenne, ist die Größe des Puffers?
    Kann mir hier jemand weiterhelfen? Ich habe gedacht, durch die Verwendung von TCP muss ich mir um die Segmentierung der Pakete keine Gedanken machen?

  • #2
    Hallo!

    Du kannst das Bild auch direkt als Filestream übertragen.

    PHP-Code:
            TcpClient client null;
            
    NetworkStream netstream null;
            
    Status string.Empty;
            try
            {                          
                 
    string message "Accept the Incoming File ";
                 
    string caption "Incoming Connection";
                 
    MessageBoxButtons buttons MessageBoxButtons.YesNo;
                 
    DialogResult result;

                 if (
    Listener.Pending())
                 {
                      
    client Listener.AcceptTcpClient();
                      
    netstream client.GetStream();
                      
    Status "Connected to a client\n";
                      
    result MessageBox.Show(messagecaptionbuttons);

                      {              {
                           
    string SaveFileName="MyFile.jpg";
                           {
                               
    int totalrecbytes 0;
                               
    FileStream Fs = new FileStream
                
    (SaveFileNameFileMode.OpenOrCreateFileAccess.Write);
                               while ((
    RecBytes netstream.Read
                    
    (RecData0RecData.Length)) > 0)
                               {
                                    
    Fs.Write(RecData0RecBytes);
                                    
    totalrecbytes += RecBytes;
                               }
                               
    Fs.Close();
                           }
                           
    netstream.Close();
                           
    client.Close();
                      }
                 }
            } 
    Die Größe ist, wie du bereits sagtest bei TCP egal.

    cu
    Zuletzt geändert von StarShaper; 04.02.2019, 23:31.

    Kommentar

    Lädt...
    X