procedure TSendArticle.Execute;
var
...
begin
    freeonterminate:=false;
    ...
    CS2:=TClientSocket.Create(nil);
   // CS2.Close;
    CS2.OnConnect:=CS2Connect;
    CS2.OnRead:=CS2Read;
    CS2.OnConnecting:=CS2Connecting;
    CS2.Host:=HostIP;
    CS2.port:=HostPort;
    CS2.Open;
    FmMain.StatusBar1.Panels[0].Text:='已打开SOCKET...';
    ...
end;procedure TSendArticle.CS2Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
FmMain.StatusBar1.Panels[0].Text:='正在连接服务器...';
end;procedure TSendArticle.CS2Connect(Sender: TObject;
  Socket: TCustomWinSocket);
var
datas:string;
begin
FmMain.StatusBar1.Panels[0].Text:='已连接服务器,正在发送数据...';
Socket.SendText(C_SendData);
end;============================================请教,以上所有代码我是放在一个线程里执行的.
但这里面合建的CLIENTSOCKET组件不能正常执行它的事件,比如我上面有这三句代码:
    CS2.OnConnect:=CS2Connect;
    CS2.OnRead:=CS2Read;
    CS2.OnConnecting:=CS2Connecting;
也写了相应的三个过程的,但它并不会执行那几个过程,为什么呢?
我把这些代码全放到主线程里又执行的好好的。为什么呢?想了一天了,实在想不通。

解决方案 »

  1.   

    估计是CS2在完成连接之前,线程已经结束了造成的。修改一下试试:procedure TSendArticle.Execute;
    var
    ...
    begin
        freeonterminate:=false;
        ...
        CS2:=TClientSocket.Create(nil);
       // CS2.Close;
        CS2.OnConnect:=CS2Connect;
        CS2.OnRead:=CS2Read;
        CS2.OnConnecting:=CS2Connecting;
        CS2.Host:=HostIP;
        CS2.port:=HostPort;
        CS2.Open;
        FmMain.StatusBar1.Panels[0].Text:='已打开SOCKET...';
        ...
        //加上下面的两句
        repeat
        until Terminated;
    end;
      

  2.   

    Delphi自带的CLIENTSOCKET有问题,当连接和发送在同一个事件中执行的时候会不响应,建议你使用其它第三方的组件,或者自己调用API来实现SOCKET通信。
      

  3.   

    jadeluo(秀峰)     //加上下面的两句
        repeat
        until Terminated;
    加了这两句还是跟之前一样,没反应哦。 zklove(花花公子) 那为什么我把上面的代码全放到主线程上又能正常执行呢?