Модератор: Модераторы

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;           
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1