delphi socket使用心得

<strong><span style="font-size:18px;color:#ff0000;">下面的代码中包含了一个消息接收器,当消息接收器收到消息后,将socket,收到的消息,状态,封装成对象,保存到tstringlist中,stringlist.strings[0]里面保存了对象的ID(也就是命令的序号,从1..X);然后放一个定时器,定时器1S中去查看命令列表;把第一条命令的stringlist.strings[0]设置为‘0’,如果定时器检查到第一条的这个标志是0,则退出,不处理。证明系统正在处理其中的一条命令。把这个命令发送给子的socketserver; 在clientread里读取数据,然后处理,处理完后,返回信息回去,证明这个命令处理完了,把处理的状态返回给消息发送器。然后调用命令对象里的socket发送给命令发送者,去掉第一条命令。   然后定时器检测到命令存在时,发送命令,设置状态。知道处理完所有的命令。</span></strong>

<pre name="code" class="delphi">procedure write_log(str: string);
var
  F: TextFile;
  mfile: string;
begin
  try
    //判断保存日志文件的目录是否存在
    if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'log') then
      MkDir(ExtractFilePath(ParamStr(0)) + 'log');

    //按日期及时间设定保存日志的文件名
    mfile := ExtractFilePath(ParamStr(0)) + 'log\' + formatdatetime('yyyy-mm-dd', now) + '.txt';

    AssignFile(F,mfile);
    if not FileExists(mfile) then
      Rewrite(F);//如果文件不存在,则创建一个新的文件,并写入
    Append(F); //追加写入
    Writeln(F,str);//写入并换行
    CloseFile(F);
  except
  end;
end;


 
procedure TfmDKGZT.DJsocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  sReceive, sDJBH: string;
  slReceive: TStringList;
begin
  // 如果需要做批发,uni_basedatabill里的Execute;重新打开单据上的监听端口;
  // 因为每张单据需要一个监听端口,再打开别的单据之前,请关掉别的端口;
  // 这个时候需要在每个命令中保存要打开的单据号。
  slReceive := TStringList.Create;
  sReceive :
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi中,Socket是通过对Windows中的Socket进行封装而实现的。在Delphi中,Socket类按照继承关系可以分为几个层次。一种是从TComponent开始继承,然后依次是TAbstractSocket、TCustomSocket、TCustomServerSocket和TServerSocket,或者是TClientSocket。另一种是直接从TObject继承过来,然后依次是TCustomWinSocket和TServerWinSocket,或者是TClientWinSocketSocket类的一些属性和方法可以用来进行相关操作,例如Connected属性用于检查连接是否成功,LocalAddress和RemoteAddress属性分别用于获取本地和远程的IP地址,SocketHandle属性用于返回Socket对象的Windows句柄,Handle属性用于接收Socket能够接受到的异步事件的Windows消息。Close()方法用于关闭连接,SendText()方法可以发送一个字符串,SendBuf()方法可以发送一段缓冲区中的字节,SendStream()方法可以发送一个流到Socket中。ReceiveText()方法用于从Socket中读取并返回一个字符串,ReceiveLength()方法用于获取从Socket中读取数据所需的缓冲区大小,ReceiveBuf()方法用于从Socket中读取指定数量的字节到缓冲区中。 所以,在Delphi中,Socket可以通过这些属性和方法来实现相关的网络通信操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [delphiSocket](https://blog.csdn.net/s371795639/article/details/53976573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值