Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: runtime в Jul 19, 2013, 18:59



Титла: Free Pascal blcksock synapse
Публикувано от: runtime в Jul 19, 2013, 18:59
Здравейте,

Малко помощ ако някой може да помогне.

правя си едно семпло echo сървърче и ползвам този Unit: http://nxpascal.googlecode.com/svn/trunk/src/nxNetwork.pas ($2)
за да създам TTCPBlockSocket  връзка с клиент/сървър, като сървъра искам да ми върне ехо ( като начало, а после да сметне нещо и да ми върне резултата на клиента ) обаче нещо удрям на камък. Принципно ако ги ползвам на localhost нещата вървят, но ако клиента ми е на друга машина не приема отговора от сървъра, освен ако не го пратя 5-6 пъти ( тогава приема отговора от сървъра ).

Кода ми е семпъл:

http://pastebin.com/DB2pXjky ($2)

Би трябвало от процедурата
procedure TTest.ServerData(sender: TConnection; data:
  {$IFDEF fpc}PByte{$ELSE}PByteArray{$ENDIF}; size,ID: integer);


при пристигане на някакви данни от клиента да ги върне с
TTCPServer(server).SendString(-1,'blqblq');

Ама нъцки. Връща само ако киент/сървъра са на една машина или ако пратя от клиента данните 5-6 пъти ( няма определен брой ).

Просто не се изпълнява
TTCPServer(server).SendString(-1,'blqblq');
ако се помещава в  процедурата TTest.ServerData

Също така данните се пращат ако ги извикам след Begin-a с ReadLn или if keypressed. Ако са в процедурата по-горе няма връщане :)  [_]3

Аз поне си мисля, че проблема е в това, че сокета се опитва да прати данни докато приема и не успява. Чудя се ако отговора го пусна в отделна нишка, която да се изпълни след получаване на данните дали няма да стане номера, но не знам само защо това чудо работи ако клиента и сървъра са на една машина.




Титла: Re: Free Pascal blcksock synapse
Публикувано от: runtime в Jul 19, 2013, 22:27
Всъщност се оправих!
Проблема беше, че в унита таймаута беше твърде нисък. След малка корекция всичко е Ок [_]3