Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Übertragung von Bildern und Sound im LAN mit 2 Rechnern (https://www.delphipraxis.net/14453-uebertragung-von-bildern-und-sound-im-lan-mit-2-rechnern.html)

F.W. 9. Jan 2004 16:49


Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ich habe ein Chatprogramm für unser kleines Heimnetzwerk (Bestehend aus Computer und Notebook) geschrieben. Der Chatmodus ist fertig und ich bin sehr zufrieden damit :-D

Nun habe ich mir überlegt, dass es eigentlich nützlich wäre, einen Modus einzubauen, über den man mit dem andere Sprechen kann.

Kann man das irgendwie hinbekommen, möglichst ohne die Datenmengen speziell irgendwo auf der Festplatte von einem der Rechner zwischenzuspeichern?
Die selbe Frage gilt auch für Bilder.

Danke schonmal! :stupid:

kiar 9. Jan 2004 16:52

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
was hälst du von netmeeting? ist bei windows dabei;

F.W. 9. Jan 2004 17:41

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Nee, ich will's selbst machen.

ritzy 11. Jan 2004 13:51

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ja das geht!

man muss das Bild bzw. die soundaufnahme in einem bzw in zwei streams verpacken diese beispielsweise per winsocket übertragen und dort wieder aus dem stream schreiben. Zum aufnehmen von sound nimm dir mal den mediaplayer aus der meist mitgelieferten bibliothek genauer unter die lupe. zur aufnahme von bildern solltest du selbst kreativ sein.
und zum übersenden ganz einfach: hir e art pseudocode:

Delphi-Quellcode:
//Zum versenden:

procedure übertragung;
var
 Stream:Tstream;
begin
 Stream:=Tstream.create;
 image1.Picture.Bitmap.SaveToStream(Stream);
 clientsocket1.Socket.SendStream(stream); //die Verbindung sollte schon hergestellt sein
end;

//Zum empfangen

procedure onserversocket1.read;
var
stream:Tstream;
begin
stream:=Tstream.Create;
image1.Picture.Bitmap.LoadFromStream(serversocket1.Socket.ReceiveBuf(stream,sizeof(serversocket1.Socket.ReceiveBuf)))
end;
Nach nem bissel rumprobieren und anpassen sollte das dann eigentlich klappen.

[edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit]

F.W. 14. Jan 2004 11:37

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Danke, super! Ich probier's mal aus!

(Geht das auch mit Sounds?)

madmax1983 15. Jan 2004 20:12

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Hallo ihr,
meine Antwort in diesem Beitrag kommt vielleicht etwas spät, aber ich habe das gerade erst ausprobiert aber...

Zitat:

image1.Picture.Bitmap.LoadFromStream(serversocket1 .Socket.ReceiveBuf(stream,sizeof(serversocket1.Soc ket.ReceiveBuf)))
...hier zeigt man mir immer einen Fehler an ist dieser Satz in ordnung? Will auch ein kleines programm zur Soundübertragung schreiben!!!


Danke schon Mal
Christian

F.W. 15. Jan 2004 20:32

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Die Antwort kommt nicht zu spät, aber dieser Satz kann garnicht in Ordnung sein, Image1 hat nichts mit Soundübertragung zu tun... :zwinker:

Ich bin leider mit der Fehlerbeseitigung noch nicht so weit, konnte es daher noch nicht ausprobieren, aber das klingt ganz gut. Wie gesagt oder besser geschrieben, es ist
Zitat:

e art pseudocode
Aber ich wer'd es nicht unausprobiert lassen!

madmax1983 15. Jan 2004 20:45

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ja das Image keine Sound Objekt ist weiß ich ja :lol: des war ja nur zu probieren ob die verbindung auch etwas überträgt nur kann ich denn server gar nicht starten wenn der satz drin steht! :gruebel:

ritzy 15. Jan 2004 20:57

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Hi,
sry stand ich wohl a bissel neben mir der stream muss natürlich vorher noch auf null gesetzt werden

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
stream:Tstream;
begin
stream:=Tstream.Create;
serversocket1.Socket.ReceiveBuf(stream,sizeof(stream));// Es könnte sein das du hinter socket noch ne Verbindungsnummer angeben //musst sollte dann Socket[0] sein ;)
stream.Seek(0,0);
image1.Picture.Bitmap.LoadFromStream(stream);
end;
Probiers mal damit. p.s. du brauchst übrigens nur einen rechner um das zu testen schick es einfach an die eigene rechner-ip.
ist für testzwecke wohl bei weitem weniger aufwand.
p.s. ich habs mal in meinen Editor eingegeben

[edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit]

ritzy 15. Jan 2004 21:01

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
hmpf ich probiers mal kurz selber
ach mensch ich krieg die kriese mit den verflixten sockets
am besten einfach mal rumprobieren
aber es geht auf jedenfall

F.W. 15. Jan 2004 23:02

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Optimistisch bleiben! Ich werd's heute (16.01.04) mal auf einer Testform probieren. Ich werde es sicher schaffen, denn ich habe mir Delphi bis jetzt komplett selbst (durch Hilfedatei und !probieren!) beigebracht. Ich werd's dann mal posten!

F.W. 16. Jan 2004 12:15

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Gut, da habe ich wohl zu viel versprochen... :lol:
Ich werde mal im Internet nach einem Tutorial für sowas suchen, denn gebrauchen kann ich auf alle Fälle...

F.W. 26. Jan 2004 20:07

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Die Verbindung herstellen klappt soweit, nur habe ich Probleme bei SaveToStream.

ATwardz 26. Jan 2004 22:28

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mich mal eurem Problem angenommen und n kleines Demoprogramm geschrieben!

Es versendet BMP über das Netz!

Das Beispiel is universell, was bedeutet das man mit wenigen änderungen alle Arten von Dateien versenden kann!

Was ich noch nicht realisiert habe, was aber sehr leicht selber machen könnt ist vielleicht noch ein eingebautes kompremierungstool, (vielleicht Zippen und BMP zu jpg)
Wenn ihr das Bild aus der Image komp. in einen Stream packen wollt und nicht wie ich hier von Datei zu Stream, benutzt einen normalen Stream!

Viel Erfolg noch!

Wenn ihr noch Fragen habt , fragt einfach!

Karneval steht vor der Tür :cheers:

F.W. 29. Jan 2004 20:10

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ich muss nochmal stören:
Das ist toll von dir, Atwardz, aber eigentlich wollte ich's mit TWinSockets machen :( , damit ich es auch mit D6 Per bearbeiten kann.

Ich bin jetzt soweit, das keine Fehlermeldungen mehr kommen:
Delphi-Quellcode:
//Versenden:
var
 ST: TMemoryStream;
begin
 ST := TMemoryStream.Create;
   try
 Start.Picture.Bitmap.SaveToStream(ST);
 if IsServer then
    SS.Socket.Connections[0].SendBuf(ST, ST.Size)
 else
    CS.Socket.SendBuf(ST, ST.Size);
   finally
 ST.Free;
   end;
//Empfangen ins Client-/ServerSocket.(Client)Read
var
 ST: TMemoryStream;
begin
 ST := TMemoryStream.Create;
    try
 SS.Socket.Connections[0].ReceiveBuf(ST, Socket.ReceiveLength);
 ST.Seek(0, 0);
 Ziel.Picture.Bitmap.LoadFromStream(ST);
    finally
 ST.Free;
    end;
Es kommt keine Fehlermeldung, es wird alles still abgearbeitet!

Was ist der Fehler?

ATwardz 29. Jan 2004 22:17

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Hi,

leider kann ich dir mit Winsocks nicht dienen! Was bring dich zu der Vermutung das Delphi 6 kein Indy unterstützt???????? Alle Delphi Versionen ab min. 3 unterstützen Indy, musst du dir halt nur saugen
Hier ----> INDY 9.0

- Download 9.0.14 Source code distribution für Windows
- Unzip es!
- Je nachdem welches Delphi du hast führst du die dclIndyX0.dpk aus!Du hast Delphi 6 also die dclIndy60.dpk und drücks auf den Install Button!
Viola Indy läuft unter Delphi 6!

Hier der funktionierende Code für das versenden eines Bildes mit einem Memorystream!

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Server.DefaultPort:=33333;
  Server.Active:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ST: TMemoryStream;
begin
  Client.Port:=33333;
  Client.Host:='192.168.2.103';
  ST := TMemoryStream.Create;
  Start.Picture.Bitmap.SaveToStream(ST);
  with Client do
  begin
  try
  Connect;
  OpenWriteBuffer;
  try
   WriteStream(ST, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
   CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      disconnect;
      ST.Free;
    end;
end;
end;

procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var
ST: TMemoryStream;
SizeOfIncomingStream: integer;
begin
ST := TMemoryStream.Create;
with AThread.Connection do
  begin
  try
      SizeOfIncomingStream := ReadInteger;
      ReadStream(ST,SizeOfIncomingStream);
  finally
      st.Position:=0;
      Ziel.Picture.Bitmap.LoadFromStream(ST);
      ST.Free;
      disconnect;
  end;
  end;
end;
Nun steht dir und Indy nichts mehr im Weg! Wenn du imernoch auf Winsocks besteht, die gegen quasi die Steinzeit symbolisieren wenn Indy unser Zeitalter ist, musst du leider jemand anderes Fragen weil es in Delphi 7 nur noch Indy gibt! Ich denke jeder hier im Forum wird dir aber zu Indy raten!
Wenn du mit Indy weiterarbeites stehe ich für alle Fragen zur verfügung!

@wardz!

Brüggendiek 30. Jan 2004 08:11

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Hallo!

Zitat:

Zitat von ATwardz
Alle Delphi Versionen ab min. 3 unterstützen Indy

Leider nicht ganz richtig! Die Indys gibt es ab D4. Bei D3 müssen die WinShoes benutzt werden (sind die Vorgänger der Indys). Grund sind die Dynamischen Arrays. Indy benutzt diese und D3 hat sie nicht.

Dieser Hinweis ist meiner Meinung nach sinnvoll, denn wenn jemand über die Suche auf diesen Thread stößt, erhält er sonst falsche Informationen.

Gruß

Dietmar Brüggendiek

F.W. 31. Jan 2004 12:30

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Meine Fresse, da hasst dus mir jetzt ganz schön gegeben, ich hatte mich gerade mit den Winsockets angefreundet :cry:

Aber na gut, hört sich überzeugend an! Werd's mir mal anschauen!

Danke!

ATwardz 31. Jan 2004 14:53

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ne, so war das nit gemeint aber ich versuche halt immer die Leute von Indy zu überzeugen, mich musste man damals auch mit Mühe überzeugen!

Für Indy-Fragen stehe ich immer bereit!

@wardz

F.W. 31. Jan 2004 21:27

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Sorry, so ich hab' das'n Bisschen übertrieben, war nicht so gemeint...

Aber das ist so'n bisschen dasselbe, von der Benutzung(als Programmierer) her, ja?

[Edit: Ich lasse mir immer dann etwas von Leuten sagen, wenn es sich überzeugend anhört; hinhören tue ich erst, wenn sie älter oder klüger sind... :wink: ]

F.W. 7. Feb 2004 22:05

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Habe jetzt folgendes Problem: Ich weiß nicht wie ich das alte Indy wegbekomme! Das Add|Remove Programm was dort erwähnt wird kenne ich nicht

ATwardz 9. Feb 2004 10:35

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Du kannst die Indy komponenten wie jede andre Komponente entfernen!

- Componenten->Configure Palette...->Alle Indy komponenten hidden und dann die Ordner löschen
- Componenten->Install Componente->remove die Indy komponete

Weiss nit ob du schon ne Antwort gefunden hast, habe es trotzdem mal geschrieben!

@wardz

F.W. 9. Feb 2004 12:33

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ist ok, ich werd's mir mal angucken!

F.W. 9. Feb 2004 21:25

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Welche Komponenten müsste ich denn jetzt an stelle von meinen Winsockets nehmen?

ATwardz 9. Feb 2004 21:53

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
IdTCPServer und IdTCPClient
Die findest du unter der Rubrik Indy Servers und Indy Clients als erste Kompo.

F.W. 9. Feb 2004 22:07

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Die sind da nicht, zumindest nicht bei der 9.0.14

[ :gruebel: Edit: *bange! :pale: ]

F.W. 13. Feb 2004 22:27

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Oh nein!!! Ich habe die Compos nochmal deinstalliert und jetzt bekomme ich sie nicht mehr in die Komponentenpalette!

bitte helft mir!!!!!!!!!!!!!!

F.W. 15. Feb 2004 15:53

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Neuer Status: Ich hab Indy9 mal mit zu 'nem Kumpel genommen (der hat die 6 Personal) bei ihm läuft's und ich habe gesehen, dass die Compos doch dabei sind, bei mir hatte ich die irgendwie übersehen, wahrscheinlich wegen dem TCP im Namen.

Aber bei mir wollen die einfach nichtmehr drauf!

ATwardz 15. Feb 2004 16:55

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
guck mal unter Component/Palette, da kannst du die Kompos einblenden und ausblenden!

F.W. 15. Feb 2004 18:31

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Wie kann ich Text und bilder über diese Verbindung schicken, ohne dass sie sich in die Quere kommen. Also im ServerExecute überprüfen, ob nun Text ankommt oder ein Stream?

[Edit: Habe Edit1 entfernt, Texte verschicken müssen sie auch können (Sorry :lol: )]

F.W. 16. Feb 2004 11:50

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Oder anders: Wie kann ich rausfinden, welche Art von Daten (In diesem Fall String oder Stream) ankommt?

F.W. 16. Feb 2004 14:23

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Ich hab's jetzt mit zwei Servern/Client gemacht, über verschiedene Ports.

Das Componentenproblem ist auch behoben!

Danke für eure Hilfe!

Nepos 24. Okt 2004 21:37

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Hallo @ All,

ich bin neu hier... ich bin gerade dabei ein programm zu erstellen welches ein Bild über Sockets versendet.

Ich habe als erstes den Code von F.W. genommen...er meckert aber immer an der:

if IsServer then

stelle.

Hat jemand eine ahnung was ich falsch mache?
Oder habe ich eine einstellung nicht beachtet?

MFG Martin

F.W. 24. Okt 2004 22:18

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Hi! Und willkommen in der DP! :cheers:

Ich habe seit diesem Beitrag nicht mehr mit Sockets gearbeitet! (Steigt auf Indy um, ist aktueller und einfach besser gemacht!)
>> Wenn du willst, schreibe ich dir den Code auf Indy um, oder geb dir da 'n Beispiel.

Das IsServer ist meine eigene Boolsche Variable, da bei mir die beiden Rechner, auf denen das Prog lief die selbe Exe hatten (es gab also kein Client im Clientprog auf Computer 1 und einen Server um Serverporg auf Computer 2), musste sich einer als Server betätigen, da ja eine Kommunikation zwischen Client und Client oder Server und Server nicht geht (glaub ich jedenfalls).

Also schau mal was du für die Verbindung brauchst und wie du Kommunikation zwischen deinen Programmen organisierst und lass das IsServer einfach weg!

Mehr kann ich dir leider nicht sagen, ist ja schon "ewig" her!
Wie gesagt/geschrieben, schreib dir gern nen Code für Indy!

Viel Glück noch!

Nepos 24. Okt 2004 23:08

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
VIelen Dank F.H.!

wäre schön wenn du das machst! :thumb:

Einfach nur ein kleines BSP mit indy, so das ich das verstehe (ich meine ohne schnick schnack) :-D

vilen Dank im vorraus

Nepos

F.W. 25. Okt 2004 16:50

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
Zum verschicken von Bildern (BMP ist das TBitmap, das zu verschicken ist, bzw. das Objekt, in das es beim Empfangen geschrieben werden soll):
Delphi-Quellcode:
//Im IdTCPClient musst du vorher festlegen:
 IdTCPClient.Host := 'EMPFÄNGER'; //IP-Addresse oder Computername (zumindest im lokalen Netzwerk)
 IdTCPClient.Port := 33333;
//Zum Senden (von irgendwo ausgelöst):
var
 St: TStream;
begin
 St := TMemoryStream.Create;
 try
   BMP.SaveToStream(St);
   St.Seek(0, soFromBeginning);

   IdTCPClient.Connect;
   try
     IdTCPClient.WriteStream(St, True, true); {  Wichtig! Der 3. Wert muss True sein, damit kommt am Server zuerst ein Integerwert an, in dem die Größe des Streams steht!  }
   finally
     IdTCPClient.Disconnect;
   end;
 finally
   St.Free;
 end;
end;

//Und zum Empfangen(folgender Quelltext kommt ins IdTCPServer OnExecute):
var
 I: Integer;
 St: TStream;
begin
 St := TMemoryStream.Create;
 try
   with AThread.Connection do begin
     I := ReadInteger;
     ReadStream(St, I);

     { Tu was mit dem Stream Bsp: }
     St.Seek(0, soFromBeginning);
     BMP.LoadfromStream(St);
   end;
 finally
   St.Free;
 end;
end;
Wenn's Probleme gibt: Frag!

CTV 26. Okt 2004 00:20

Re: Übertragung von Bildern und Sound im LAN mit 2 Rechnern
 
oops fallscher thread :(
sorry


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz