Модератор: Модераторы
TcpSrv = class(TThread)
private
FTcpSrv: TTCPBlockSocket;
public
constructor Create;
destructor Destroy; override;
procedure Execute; override;
end;
TcpSrvThrd = class(TThread)
private
FTcpSrv: TTCPBlockSocket;
CSock: TSocket;
FTcpIn, FTcpOut, FMess, FDevIp: string;
FDevId: Integer;
FTcpRecvLst, FTcpSendLst: TStringList;
public
constructor Create (HSock:TSocket);
//procedure SyncMode(Mode: string);
//procedure UpdateWhm;
procedure GetDevId;
//procedure LogAdd;
procedure Execute; override;
end;
var
Form1: TForm1;
Len,I,J,k:Integer;
MyServ:TcpSrv;
ConnectCl:TcpSrvThrd;
{ TcpSrv }
constructor TcpSrv.Create;
begin
inherited create(false);
FTcpSrv := TTCPBlockSocket.create;
FreeOnTerminate := True;
end;
destructor TcpSrv.Destroy;
begin
FTcpSrv.Free;
end;
// главнй поток сервера
procedure TcpSrv.Execute;
var
ClientSock: TSocket;
begin
with FTcpSrv do
begin
CreateSocket;
SetLinger(True,10);
Bind('83.220.243.247','3300'); // ip сервера и порт
Listen;
repeat
if Terminated then Break;
if CanRead(100) then
begin
ClientSock := Accept;
if LastError = 0 then ConnectCl:=TcpSrvThrd.Create(ClientSock);
end;
until False;
end;
end;
{ TcpSrvThrd }
constructor TcpSrvThrd.Create(HSock: TSocket);
begin
inherited create(false);
CSock := HSock;
FreeOnTerminate := True;
FTcpRecvLst := TStringList.Create;
FTcpSendLst := TStringList.Create;
FDevId := 0;
FDevIp := '';
end;
// если подключился клиент
procedure TcpSrvThrd.Execute;
var buf:array[0..2] of byte;
begin
inherited;
FTcpSrv := TTCPBlockSocket.Create;
//FTcpSrv.ConvertLineEnd := True;
//------------------------------------------------
try
FTcpSrv.Socket := CSock;
FTcpSrv.GetSins;
FDevIp := FTcpSrv.GetRemoteSinIP;
form1.Label2.Caption:=FDevIp;
repeat
if Terminated then Break;
FTcpIn := FTcpSrv.RecvString(500);
if FTcpIn <> '' then
begin
form1.Memo1.Lines.Add(FTcpIn);
end;
until false;
finally
FTcpSrv.CloseSocket;
FTcpSrv.Free;
end;
end;
comdsc:=fpopen('/dev/ttyS1', O_NonBlock, O_RdWr or O_NOCTTY or O_NDELAY);
fpfcntl(comdsc, F_SETFL, O_NONBLOCK);
tcgetattr(comdsc, tio);
tio.c_cflag := {tio.c_cflag}B115200{B9600} or CS8 or CLOCAL or CREAD or HUPCL;
tio.c_lflag := 0;
tio.c_oflag := OPOST;
tio.c_iflag := IXOFF;
tio.c_cc[VMIN] := 0;
tio.c_cc[VTIME] := 10;
tio.c_cc[VSTOP] := 1;
tcsetattr(comdsc, TCSANOW, tio);
fpFD_ZERO(rwset);
fpFD_ZERO(errorsetfpopen);
fpFD_SET(comdsc, rwset);
fpFD_SET(comdsc, errorset);
writeln('comdsc='+inttostr(comdsc));
fpwrite(comdsc, buf[0], 256);
fpselect(comdsc+1, nil, @rwset, @errorset, 3000);
fpFD_ZERO(rwset);
fpFD_ZERO(errorset);
fpFD_SET(comdsc, rwset);
fpFD_SET(comdsc, errorset);
i:=fpread(comdsc, buf[0], 256);
Mr.Smart писал(а):А вы уверены, что данные поступают на com порт?
У меня проблема по работе с com портом в линуксе. Пишу в lazarus. Где может быть ошибка?
serg_iv
Можешь поделиться опытом, как это осуществить???
Буду премного благодарен
ser:=TBlockserial.Create;
ser.RaiseExcept:=false;
ser.Connect('/dev/ttyS1');
ser.Config(115200,8,'N',0,false,false);
ser.SendInteger((data[1] shl 0)or(data[2] shl 8)or(data[3] shl 16)or(data[4] shl 24));
ser.SendByte(13);
ser.RecvInteger(4);
a:=ser.RecvByte(1);
writeln(a);
ser.Free;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8