AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

bind() in console application

Ein Thema von Lyan · begonnen am 1. Dez 2014 · letzter Beitrag vom 2. Dez 2014
Antwort Antwort
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

bind() in console application

  Alt 1. Dez 2014, 18:22
Hallo,

ich würde gerne einen Client auf 0.0.0.0:9000 lauern lassen.
Nachdem ich das UDP-Socket erstellt habe und via bind auf den Port gebunden habe, stellt sich für mich noch die Frage wie ich das mit den Messages mache.

Habe eine Funktion:

procedure TClientClass.SocketMessage(var msg: TMessage);

in der ich auch recvFrom calle.

Diese sollte die msg abfangen, bzw. die routine soltle zumidnest gecallt werden oder?

Meine Main, sieht dann so aus:

Code:
var
  ClientClass : TClientClass;
  Msg: TMsg;
  bRet: Integer;

begin
  ClientClass := TClientClass.Create;
  repeat
    bRet := Integer(GetMessage(Msg, 0, 0, 0));

    if bRet = -1 then
    begin
      // error
      Break;
    end
    else
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
  until bRet = 0;
end.

Ich denke mal das Problem liegt an TMEssage und TMsg, oder?
Danke im voraus
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: bind() in console application

  Alt 2. Dez 2014, 08:44
Ähm, bekommen Konsolenanwendungen überhaupt Windows Nachrichten?

Delphi-Quellcode:
program Project5;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

var
  Msg: TMsg;
  bRet: Integer;

begin
  repeat
    writeln('Laeuft1');
    bRet := Integer(GetMessage(Msg, 0, 0, 0));

    if bRet = -1 then
    begin
      writeln('Error');
      Break;
    end
    else
    begin
      writeln(IntToStr(Msg.message));
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
    writeln('Laeuft2');
  until bRet = 0;
end.
Es wird mir nur das Laeuft1 ausgegeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: bind() in console application

  Alt 2. Dez 2014, 08:48
Hallo,

ich würde gerne einen Client auf 0.0.0.0:9000 lauern lassen.
Nachdem ich das UDP-Socket erstellt habe und via bind auf den Port gebunden habe, stellt sich für mich noch die Frage wie ich das mit den Messages mache.
Das ist ein Umweg, mit den Socket-Komponenten Indy (und Synapse) benötigt man keinen Workaround um in einer Konsole-Anwendung Windows-Nachrichten zu empfangen. Sie gehen direkt auf die Windows Socket API.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: bind() in console application

  Alt 2. Dez 2014, 09:16
Ähm, bekommen Konsolenanwendungen überhaupt Windows Nachrichten?
Sobald man die Message-Queue abfragt (GetMessage) oder ein "Windows" erstellt, wird von Windows für diesen Thread eine MessageQueue angelegt.
Aber Auslesen und vorallem Behandeln muß man Diese selber (außerhalb des VCL-Threads/Hauptthreads), denn sonst funktionieren dort natürlich keine Messages.
$2B or not $2B
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: bind() in console application

  Alt 2. Dez 2014, 09:36
Sind die uralten Win3.1 Socket-Komponenten nicht auch Message-basiert? Ich kenne mich da nicht aus, meine aber gehört zu haben dass sich der Ansatz als sehr ungünstig herausgestellt hatte.
  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:10 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