AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Daten senden: Client->Server->Client
Thema durchsuchen
Ansicht
Themen-Optionen

Daten senden: Client->Server->Client

Ein Thema von SleepyMaster · begonnen am 28. Apr 2004 · letzter Beitrag vom 14. Mai 2004
Antwort Antwort
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#1

Daten senden: Client->Server->Client

  Alt 28. Apr 2004, 12:27
Hi ihrs!
Kann mir mal jemand helfen:

Ich will, dass sich mein Client mit dem Server verbindet, ihm einen Befehl sendet, was zu tun ist und der Server dann dem Clienten antwortet.

Mein Server:
Delphi-Quellcode:
program Project1;

uses
  Windows,
  WinSock,
  Unit1 in 'Unit1.pas';

var
  wsaData: TWSADATA;
  T:DWord;
  s: TSocket;
  sock: sockaddr_in;
  conSock: TSocket;
  Empf: string;
  senden:string;
begin
if (WSAStartup(MAKEWORD(2,0),wsaData)) <> 0 then
  exit;
s := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if s = INVALID_SOCKET then
  exit;
ZeroMemory(@sock, sizeof(sock));
sock.sin_addr.S_addr := INADDR_ANY;
sock.sin_family := AF_INET;
sock.sin_port := htons(1223); // PORT
if (bind(s, sock, sizeof(sock))) = SOCKET_ERROR then
  exit;
if (listen(s, 10)) = SOCKET_ERROR then
  exit;
SetLength(Empf,8192);
while true do
  begin
  conSock := accept(s, nil, nil);
  if conSock <> INVALID_SOCKET then
    begin
    recv(conSock, Empf[1], 2, 0);
    if Empf='01'then
      begin
      Senden:='Hallo';
      send(conSock,Senden[1],Length(Senden),0);
      end;
    end;
end;

end.
Mein Client:
Delphi-Quellcode:
function GetData(const URL: String): string;
var
  S: TSocket;
  A: SOCKADDR_IN;
  W: TWsaData;
  H: pHostEnt;
  Senden: String;
begin
  SetLength(result,8192);
  if WsaStartup(MakeWord(1, 1), W) = 0 then
  begin
    H := GetHostByName(PChar(URL));
    if H <> nil then
    begin
      FillChar(A, SizeOf(A), 0);
      A.sin_family := AF_INET;
      A.sin_addr.S_addr := PDWord(H.h_addr_list^)^;
      A.sin_port := htons(1223);
      S := Socket(AF_INET, SOCK_STREAM, 0);
      if S <> INVALID_SOCKET then
      begin
        if Connect(S, A, SizeOf(A)) = 0 then
          begin
          Senden:='01';
          send(S,Senden[1],Length(Senden),0);
          recv(S, result[1], Length(result), 0);
          end;
        CloseSocket(S);
      end;
    end;
  end;
  WSACleanup;
end;
Vielen Dank schon mal!
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: Daten senden: Client->Server->Client

  Alt 28. Apr 2004, 12:37
Wo liegt denn das Problem?
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#3

Re: Daten senden: Client->Server->Client

  Alt 28. Apr 2004, 12:43
Das hab ich wohl vergessen

Delphi-Quellcode:
program Project1;

uses
  Windows,
  WinSock,
  Unit1 in 'Unit1.pas';

var
  wsaData: TWSADATA;
  T:DWord;
  s: TSocket;
  sock: sockaddr_in;
  conSock: TSocket;
  Empf: string;
  senden:string;
begin
if (WSAStartup(MAKEWORD(2,0),wsaData)) <> 0 then
  exit;
s := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if s = INVALID_SOCKET then
  exit;
ZeroMemory(@sock, sizeof(sock));
sock.sin_addr.S_addr := INADDR_ANY;
sock.sin_family := AF_INET;
sock.sin_port := htons(1223); // PORT
if (bind(s, sock, sizeof(sock))) = SOCKET_ERROR then
  exit;
if (listen(s, 10)) = SOCKET_ERROR then
  exit;
SetLength(Empf,8192);
while true do
  begin
  conSock := accept(s, nil, nil);
  if conSock <> INVALID_SOCKET then
    begin
    recv(conSock, Empf[1], 2, 0);//Da liegt es! Der Server wartet hier sich tot! (owohl ich ihm Daten gesendet hab!)
    if Empf='01'then
      begin
      Senden:='Hallo';
      send(conSock,Senden[1],Length(Senden),0);
      end;
    end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#4

Re: Daten senden: Client->Server->Client

  Alt 28. Apr 2004, 12:48
Bin mir nicht sicher, aber evtl. sind die Verbindungen gepuffert. Versuche mal noch ein #10 an deine Strings anzuhängen (bzw. einen flush aufruf, weiß aber nicht ob es so einen gibt bzw. wie der heißt).
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#5

Re: Daten senden: Client->Server->Client

  Alt 28. Apr 2004, 12:54
Nein! Das hilft leider nicht!
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#6

Re: Daten senden: Client->Server->Client

  Alt 28. Apr 2004, 16:45
Das Problem liegt wo ganz anders. Es wird alles richtig empfangen, nur ist dein Verlgeich Empf='01' falsch und damit holt er sich gleich die nächste Verbindung (man sollte den Socket vielleicht auch irgendwo schließen :-). Die kleinste Änderung ist du machst aus deinem recv folgendes:

setlength(empf,recv(conSock, Empf[1], 2, 0)); Und dann klappts...
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#7

Re: Daten senden: Client->Server->Client

  Alt 14. Mai 2004, 12:16
OK! Vielen Dank! Es geht!
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:06 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