Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client-Server-Kommunikation im LAN (https://www.delphipraxis.net/17330-client-server-kommunikation-im-lan.html)

Schubi 5. Mär 2004 14:04

Re: Client-Server-Kommunikation im LAN
 
@ The-X:
Schon klar. Wie gesagt, der Admin :mrgreen:

@ 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?

Fischy 5. Mär 2004 14:20

Re: Client-Server-Kommunikation im LAN
 
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

Schubi 5. Mär 2004 14:32

Re: Client-Server-Kommunikation im LAN
 
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?

tobster 5. Mär 2004 15:02

Re: Client-Server-Kommunikation im LAN
 
Zitat:

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:

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.

Schubi 5. Mär 2004 15:08

Re: Client-Server-Kommunikation im LAN
 
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 :mrgreen:

tobster 5. Mär 2004 15:11

Re: Client-Server-Kommunikation im LAN
 
Zitat:

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. :wink:

Fischy 5. Mär 2004 15:11

Re: Client-Server-Kommunikation im LAN
 
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

Schubi 5. Mär 2004 15:23

Re: Client-Server-Kommunikation im LAN
 
@ 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

tobster 5. Mär 2004 17:12

Re: Client-Server-Kommunikation im LAN
 
Zitat:

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.

Schubi 5. Mär 2004 19:43

Re: Client-Server-Kommunikation im LAN
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
Seite 3 von 3     123   

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