我在编写网络程序的时候,用TClientSocket控件实现。但是我想在Socket连接上之后,就立即发送一个数据包,但对方老是收不到,不知道怎么来解决?下面是我的代码,帮忙看看。BitBtn1的onClick事件
var
str1:string;
begin
    str1:='192.168.1.252';
    if trim(str1)<>'' then
    begin
     ClientSocket1.Close;
     ClientSocket1.Address := str1;
     clientsocket1.Port:=12;//server port
     ClientSocket1.ClientType := ctNonBlocking;
    try
       clientsocket1.open;
       clientsocket1.Socket.SendText('测试数据:'+str1);
       showmessage('连接成功');
    except
       showmessage('连接失败');
       end;
    end;
end;
点击按钮后,只弹出连接成功,但是clientsocket1.Socket.SendText('测试数据:'+str1);这个数据对方没有收到,如果将这个发送数据写到其他按钮里面对方就能收到数据,这种情况怎样来解决呀。我就是想在Socket连接上之后,就立即发送一个数据。高手帮忙找一个办法吧。

解决方案 »

  1.   

    clientsocket1.open;改为 clientsocket1.socket.connect(i) i是整型指Server端监听此socekt的一个实例,若没有,则要创建;  或者你把端口号改大一点试试
      

  2.   

    可以在OnConnect事件发生后在发送数据
      

  3.   

    连接不能马上发送消息,握手有一个时间,你可以在OnConnect Everts里面写ClientSocket1.Socket.SendText();
      

  4.   

    同意楼上的,你用的是非阻塞,你把ClientSocket1.ClientType := ctBlocking;就可以了
      

  5.   

    只需这样ClientSocket1.Active:=true;
      

  6.   

    clientsocket1.open;不就相当于ClientSocket1.Active:=true;open后并不能马上发数据,就这样
      

  7.   

    在OnConnect事件里写发送信息较方便
      

  8.   

    clientsocket1.open;
          while not clientsocket1.active do
          begin
             Application.processMessages;
             sleep(1);
          end
          clientsocket1.Socket.SendText('测试数据:'+str1);
      

  9.   

    可以在OnConnect事件发生后在发送数据
      

  10.   

    不是找不到,而是你根本就没创建从面板里面拖出来是没有Socket.sendtext的
      

  11.   

    要搞清楚,clientsocket1.open;以后,不会停下来,程序继续跑下去,下面的代码不会等clientsocket1与服务器连接成功后才继续跑下去,也就是说不同线程跑的。
    这样就出现你的问题,建议在在OnConnect事件里写发送信息
      

  12.   

    看偶的贴子http://community.csdn.net/Expert/topic/3326/3326247.xml?temp=.2388422
      

  13.   

    Nonblocking连接后必须在OnConnect事件发生后发送数据,请楼主马上结贴
      

  14.   

    delphi7 的compents 菜单里打开install  packages 菜单,选 ADD... ,在选择delphi安装目录里的bin目录,找dclsockets70.bpl,安装