我们买了个串口转TCP的转换器,将他连接到我们的串口设备上,然后我写了个客户端程序,串口服务器作为TCP服务端:
var
 buf:array of byte;
begin
 client.Active:=false;
 client.host:='192.168.1.213';
 client.Port:=2000;
 client.Active:=true;
 ret:=client.Socket.Connected; setlength(buf,5);
 buf[0]:=$c0;
 buf[1]:=3;
 buf[2]:=$39;
 buf[3]:=0;
 buf[4]:=$fc; total:=client.Socket.SendText(buf); 
end;
 然后在clientsocket的接收事件中写了个messagebox("aaa"),结果发现该事件没有被激活,也就是socket没有收到数据.
procedure TForm1.clientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
 showmessage('aaa');
end;  但用串口跟踪程序发现串口已经收到5个字节,并有返回,但就是事件没有发生,不知道怎么回事!

解决方案 »

  1.   

    上面的sendtext写错了,应该是sendbuf!
      

  2.   

    我sendbuf(buf[0],5)也写过了,也没用!
      

  3.   

    以前好像做过类似的程序,当使用 client.Active:=true;后,需要把程序的控制权从这个过程中交出去,以便系统进行相应的事件设置动作。像你这样直接连接后就立刻发送,那么对端返回的内容将不能被响应。试试在上述过程中仅进行连接,然后用个按钮事件发送内容过去,看看能不能促发read事件
      

  4.   

    在clientsocket.onconnect事件中写代码,看能不能被触发?
      

  5.   

    串口?能用TClientSocket连接吗?都是用MSComm32吧?
      

  6.   

    把发送的过程放到onconnect事件中去setlength(buf,5);
     buf[0]:=$c0;
     buf[1]:=3;
     buf[2]:=$39;
     buf[3]:=0;
     buf[4]:=$fc; total:=client.Socket.SendText(buf);就是这一段
      

  7.   

    要看的你ClientSocke是ctNonBlocking还是ctBlocking的.是ctNonBlocking的话,发送信息写在OnWrite事件中.