AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Client-Server-Kommunikation im LAN
Thema durchsuchen
Ansicht
Themen-Optionen

Client-Server-Kommunikation im LAN

Ein Thema von Schubi · begonnen am 3. Mär 2004 · letzter Beitrag vom 5. Mär 2004
Antwort Antwort
Seite 3 von 3     123   
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#21

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 15:04
@ The-X:
Schon klar. Wie gesagt, der Admin

@ Fischy:
Ich versuch gerade verzweifelt per UDP Daten aus einem Memorystream zu versenden. Irgendwie bekomm ich die am anderen Ende nimemr zusammen. Kannst du mir helfen?
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Fischy

Registriert seit: 20. Aug 2003
15 Beiträge
 
#22

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 15:20
Ich versuchs mal, kann dir aber nicht versprechen, daß das in den nächsten 2 Tagen noch was wird (gleich is feierabend ). Du benutzt jetzt die ICS Komponenten? Wäre vieleicht hilfreich wenn du die Source postest in der du sendest bzw. empfängst.

Gruß,

Fischy
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#23

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 15:32
Senderseite:
Delphi-Quellcode:
    
    WSocket.Proto := 'udp';
    WSocket.Addr := '127.0.0.1';//'10.1.1.255';
    WSocket.Port := PortEdit.Text;
    WSocket.LocalPort := LocalPortEdit.Text;
    WSocket.Connect;
    Stream1 := TMemoryStream.Create;
    Image1.Picture.Bitmap.SaveToStream(Stream1);
    WSocket.Send(Stream1.Memory,Stream1.Size);
    Stream1.Free;
    WSocket.Close;
Auf der Empfängerseite hab ich nur den Stream und speicher den dann irgendwo hin. Das ist ja irrelevant.

so schauts aus:
Delphi-Quellcode:
Stream1.Setsize(WSocket.BuffSize);
WSocket.Receive(Stream1.Memory,WSocket.BufSize);
Aber die Daten kommen in Etappen wenn mich nicht alles täuscht?!
Wie bastle ich die zusammen?
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#24

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 16:02
Zitat von Schubi:
Senderseite:
Delphi-Quellcode:
    
    WSocket.Addr := '10.1.1.255';
Versuch mal die 255.255.255.255, die ich dir schon gepostet hatte. So funktionierts hier zumindestens.

Zitat von Schubi:
Aber die Daten kommen in Etappen wenn mich nicht alles täuscht?!
Wie bastle ich die zusammen?
Es gibt diverse Beispiele, wo das schon drin steht. Ich suchs mal eben:

Delphi-Quellcode:
var RcvBuf: array [0..1023] of char;
    RcvLen: integer;

procedure TForm1.wsServerDataAvailable(Sender: TObject; Error: Word);
var Len,i: Integer;
    Source: TSockAddrIn;
begin
 { Receive the data that has arrived, put it after the data already here }
 Len := sizeof(Source);
 Len := wsServer.ReceiveFrom(@RcvBuf[RcvLen],SizeOf(RcvBuf)-RcvLen-1,Source,Len);
 if Len <= 0 then Exit;
 RcvLen := RcvLen + Len;
 RcvBuf[RcvLen] := #0;
 while TRUE do begin
  i := StrScan(@RcvBuf, #10) - RcvBuf;
  if i < 0 then break;
  RcvBuf[i] := #0;
  //Communication(StrPas(RcvBuf),StrPas(inet_ntoa(Source.sin_addr)));
  RcvBuf[i] := #10;
  if i >= (RcvLen-1) then begin
   RcvLen := 0;
   break;
  end;
  { Not the last line, move the next one in front of buffer }
  Move(RcvBuf[i+1],RcvBuf,RcvLen-I);
  RcvLen := RcvLen-i-1;
 end;
end;
Frei modifiziert nach dem Ereignis das im Beispiel UDPLSTN definiert ist, was ich auch schon geschrieben hatte.
Ciao
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#25

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 16:08
Danke erstmal!
Subnet 255.255.255.255 geht auch net, hab ich längst probiert. Wie gesagt, ich sende einfach an alle Adressen nacheinander!
Werd jetzt erstmal deinen Code auseinandernehmen
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#26

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 16:11
Zitat von Schubi:
Subnet 255.255.255.255
Ich hoffe, du meinst nicht wirklich Subnet. Das ist die Pseudo-IP, zu der du verbinden müsstest.
Ciao
  Mit Zitat antworten Zitat
Fischy

Registriert seit: 20. Aug 2003
15 Beiträge
 
#27

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 16:11
Ok, mal ganz auf die Schnelle die Theorie, vieleicht hilft dir das weiter:

Bei UDP werden im gegensatz zu TCP keine Empfangsbestätigungen (ACK) vom Empfänger an den Sender zurüch geschickt. Korrupte Pakete werden einfach verworfen. Außerdem sind Duplikation, Reihenfolgevertauschung und Paketverlust möglich. Das ist eben das unsichere an UDP. Du mußt die Daten nehmen wie sie kommen. Bei TCP Paketen steht im Header eine Sequenznummer (Seq) um die Reihenfolge zu bestimmen. Die gibt es bei UDP Paketen nicht. In deinem Netzwerk sollte es aber nicht zu Fehlern kommen. Was du prinzipiell machen kannst, ist deine Anwendung die ACKs übernehmen zu lassen. Ich hab grad nochmal ein par Folien gefunden, die dir bestimmt weiterhelfen.

Gruß,

Fischy
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#28

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 16:23
@ Tobster:
Ich dachte du sprichst auf das Subnet-Problem an. Die Verbindung mit 127.0.0.1 geht wunderbar. Warum sollte ich da 255.255.255.255 nehmen?

@Fischy: Danke erstmal
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#29

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 18:12
Zitat von Schubi:
@ Tobster: Die Verbindung mit 127.0.0.1 geht wunderbar. Warum sollte ich da 255.255.255.255 nehmen?
Naja, weil die 127.0.0.1 nur auf den eigenen Rechner zeigt und keinen Broadcast verursacht. Zum Testen ob überhaupt was übertragen wird ist sie natürlich geeignet.
Ciao
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#30

Re: Client-Server-Kommunikation im LAN

  Alt 5. Mär 2004, 20:43
Das Broadcast-Problem ist doch schon gelöst!
Mir gehts jetzt drum ne Datei zu übertragen, hätte ich vieleicht in einen andere Thread packen können, passt aber noch recht gut zum Topic.
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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