Hi all,
I am new to delphi.My application needs to act as client and send some
commands to create notification channel to the host reader(IP
192.168.100.75/Port 1000, then receive the response from the host reader.
But before it sends commands to the host reader,it need to start the server
at IP Address 192.168.100.1/Port 3000,so that once the commands for
notification channel is executed,(my application) the server can receive the
tags send by the reader.
Ma application can successfully connect to the host reader as client and
send the commands and receive the response.It can also create and connect to
the server,
but The problem is,The server cannot receive any output from the reader
client.
The SBuffer shows all 0 and SByteCount is -1.
I want to continously receive hexadecimal values from the reader.
I am attaching a section of my code.
Please help.Needed it urgently
unit CAENUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DynamicSkinForm, WSocket, WSocketS, StdCtrls, SkinBoxCtrls,
ExtCtrls, SkinCtrls, ComCtrls, ToolsUnit, StrUtils, DB, Grids, DBGrids,
dbisamtb, BaseGrid, AdvGrid, DBAdvGrid;
type
TTcpSrvClient = class(TWSocketClient)
public
RcvdLine : String;
ConnectTime : TDateTime;
end;
TCAENForm = class(TForm)
DynamicSkinForm: TspDynamicSkinForm;
LogSplitter: TspSkinSplitter;
LogGroupBox: TspSkinGroupBox;
LogMemo: TspSkinMemo;
LogScrollBar: TspSkinScrollBar;
TopPanel: TspSkinPanel;
TransponderGroupBox: TspSkinGroupBox;
TransponderVScrollBar: TspSkinScrollBar;
TransponderHScrollBar: TspSkinScrollBar;
UniqueGroupBox: TspSkinGroupBox;
TagDataSource: TDataSource;
UniqueTagsSplitter: TspSkinSplitter;
UniqueTagGrid: TDBAdvGrid;
TransponderListView: TspSkinListView;
CAENClientSocket: TWSocket;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure TagDataSourceDataChange(Sender: TObject; Field: TField);
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure CAENClientSocketSessionConnected(Sender: TObject; ErrCode: Word);
procedure CAENClientSocketDataAvailable(Sender: TObject; ErrCode: Word);
private
{ Private declarations }
ByteCount: integer;
Data: string;
TagId: string;
TagSetReceived: boolean;
IncomingTags: TStringList;
SBuffer: array[0..100000]of byte;
Buffer: array [0..1023] of byte;
CreateNotfTrgCmd: array [0..54] of byte;
CreateReadTrgCmd: array [0..53] of byte;
CreateNotfChnCmd: array [0..68] of byte;
AddSrcNotfChnCmd: array [0..52] of byte;
AddNotfTrgNotfChnCmd: array [0..58] of byte;
AddReadTrgSrcCmd: array [0..51] of byte;
//AddReadPtSrcCmd: array [0..8] of byte;
procedure TCPServerClientConnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
procedure TCPServerClientDataAvailable(Sender: TObject; Error: Word);
public
{ Public declarations }
SByteCount: integer;
Processing: boolean;
TCPServer: TWSocketServer;
ServerRunning: boolean;
procedure Display(msg: String);
procedure StartTCPServer;
procedure StopTCPServer;
procedure ClearWorkArea;
procedure ClearAllData;
procedure Connect;
procedure Close;
procedure SendCommand(command: Pointer; size: integer);
procedure Mainloop;
procedure ExecuteCommand;
end;
var
CAENForm: TCAENForm;
implementation
uses MainUnit;
{$R *.dfm}
procedure TCAENForm.StartTCPServer;
begin
TCPServer := TWSocketServer.Create(nil);
TCPServer.Addr := '192.168.100.1';
TCPServer.Port := '3000';
TCPServer.Proto := 'tcp';
TCPServer.LineMode := False;
//TCPServer.LineMode := True;
TCPServer.LineEcho := False;
TCPServer.LineEdit := False;
TCPServer.ClientClass := TTcpSrvClient;
TCPServer.Banner := '';
TCPServer.onfiltered= TCPServerClientConnect;
TCPServer.onfiltered= TCPServerClientDataAvailable;
TCPServer.Listen;
end;
procedure TCAENForm.StopTCPServer;
begin
TCPServer.Close;
TCPServer.Free;
end;
procedure TCAENForm.Display(msg: String);
begin
LogMemo.Lines.BeginUpdate;
try
while LogMemo.Lines.Count > 200 do
LogMemo.Lines.Delete(0);
LogMemo.Lines.Insert(0,Msg);
finally
LogMemo.Lines.EndUpdate;
end;
end;
procedure TCAENForm.TCPServerClientConnect(Sender: TObject;
Client: TWSocketClient; Error: Word);
begin
with Client as TTcpSrvClient do begin
Display(#13#10'Client connected.' +
' Remote: ' + PeerAddr + ':' + PeerPort +
' Local: ' + GetXAddr + ':' + GetXPort);
{Display('There is now ' +
IntToStr(TWSocketServer(Sender).ClientCount) +
' client(s) connected.');}
onfiltered= TCPServerClientDataAvailable;
Confiltered= Now;
end;
end;
procedure TCAENForm.TCPServerClientDataAvailable(
Sender : TObject;
Error : Word);
var
i: integer;
TagVisibleCount: string;
TagTimeStamp: TDateTime;
TagValid: boolean;
s: string;
begin
IncomingTags.Clear;
with Sender as TTcpSrvClient do begin
SByteCount := TCPServer.Receive(@SBuffer, SizeOf(SBuffer) - 1);
Display('No of TagBytes Received: '+ IntToStr(SByteCount));
for i := 1 to SByteCount do
s := s + IntToHex(SBuffer[i],2);
Display ( s );
end;
end;
---------------------------------
Groups are talking. We´re listening. Check out the handy changes to
Yahoo! Groups.
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be