[PR]dziwne problemy z socketami...

0

mam taka procedurke:

procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Socket.ReceiveText = 'Go1' then
ShowMessage('Go1');

if Socket.ReceiveText = 'Go2' then
ShowMessage('Go2');
end;

jezeli do ServerSocket dochodzi tekst 'Go1' to pokazuje mi komunikat 'Go1' (ShowMessage('Go1')) - prawodlowo

ale jezeli dochodzi dochodzi tekst 'Go2' to nic sie nie dzieje :( a powinien pokazac sie komunikat 'Go2' (ShowMessage('Go2'))

na zdrowy rozsadek wszystko powinno grac... Od razu mowie ze klient teksty wysyla na 100%. nie mam zielonego pojecia co sie dzieje?? nie powinno byc tak. nie korzystam z socketow pierwszy raz i wiem kiedys nie mialem z tym problemu. moze teraz po prostu cos zle robie, ale wydaje mi sie ze wszystko jest ok jezeli chodzi o procedure.
chodzi tu oczywiscie o kolejnosc w bloku begin ... end ... ServerSocket po prostu reaguje na pierwsza procedure if then (jezeli pierwsza bedzie 'Go2' to wyswietli mi tez taki komunikat!)
moze mi ktos pomoc?

0
var
Msg:String;
begin
Msg:=Socket.ReceiveText;


if Msg='1' then
//robcos

if Msg='2' then
//robcosinnego

To ja jeszcze dopisze ze mozesz uzyc tec instrukcji case of

0

a źle!! ;p

bo patrz:

if receivetext <font color="blue"><--- powoduje odczytanie 'Go2' z bufora </span>= 'Go1' then ...
if receivetext <font color="blue"><--- bufor jest już pusty po poprzednim odczycie! Zwraca pusty ciąg</span> = 'Go2' then ... <font color="blue"><-- ten warunek sie nie wykona</span>

Musisz dać:

var 
  OdczytanyText : string;
begin
  OdczytanyText := Socket.ReceiveText;
  if OdczytanyText = 'Go1' then ShowMessage('Go1');
  if OdczytanyText = 'Go2' then ShowMessage('Go2');
end;

<font color="darkblue">//PS. Tradycyjnie już odpisuje równocześnie z kim innym :-/ Tyle, że chyba zacząłem wcześniej, bo się bardziej rozpisałem.</span>

0

ReceiveText ma to do siebie że po pierwszym odczytaniu ulega kasacji, więc należałoby zrobić tak:

procedure TForm1.ServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var S: String;
begin
 S:=Socket.ReceiveText ;
 if S = 'Go1' then ShowMessage('Go1');
 if S = 'Go2' then ShowMessage('Go2');
end;

Czytać helpa w mordę jeża!! :P No ulżyło mi.

[Dopisane] Ale się ludzi rzucili z odp na tego posta hehe ;p

//reklama na ircu :) zdziala cuda - lofix

0

BTW ...zawsze myślałem że ReceiveText to taka wypasiona
właściwość którą da się odczytać tylko raz, teraz zajrzałem do źródła
a tu się okazało że to funkcja :-D

0

to wyjaśnia dlaczego zawartość bufora kasuje się po pierwszym pobraniu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1