本帖最后由 yklovelife 于 2009-11-08 20:33:28 编辑

解决方案 »

  1.   

    IP是写错了(写成127.0.1.1也可以,已测试过),现改为了localhost,问题依然存在,加断点也跟过了,不能进入 有ServerSocket的ServerSocket1ClientRead事件中。
      

  2.   

    发送消息前先加判断if ClientSocket1.Active then ClientSocket1.Socket.SendText('test')
    else showmessage('连接失败');估计是没有连接成功吧 
      

  3.   

    加判断试验了下,为什么总提示‘连接失败’,难道
     ClientSocket1.Active:=True; 
    没起作用,为什么呢?如何做才可以。
      

  4.   

    建议 getCon 改成函数  成功后返回TRUE然后再发送数据你用的什么控件  
      

  5.   

    经过各位提示,问题出在当执行完
    ClientSocket1.Active:=True;//(block1)
    后不能立即执行
    ClientSocket1.Socket.SendText('test');//(block2)
    在(block1)和block2之间必须执行任意操作,比如shwomessage('test'),
    否则ClientSocket1.Active的值一直为false;
    不知道是不是这样的,但是还是不明白这是为什么~~有望高人前来指点。
      

  6.   

    我用的是ServerSocket和ClientSocket控件。
      

  7.   

    当你ClientSocket1.Active:=True;的时候仅仅是修改了1个属性值,而这个时候后台会异步的做一些为套接字连接的准备工作 如:监听...
    也就是说你修改属性值完成后,后台为套接字连接准备的工作不一定做完。
    在(block1)和block2之间sleep下。
    试试、
      

  8.   

    加Sleep试过了,还是不行,请问下
    {而这个时候后台会异步的做一些为套接字连接的准备工作 如:监听... }
    这话如何理解。
      

  9.   

    ClientSocket1就非阻塞式的,你连接了,但还没有连接成功,直接SEND可能会失败,SLEEP一下试试
    咋还有人问这问题?
      

  10.   

    Sleep不顶用啊,我试过了,楼上的,麻烦在帮忙看看。
      

  11.   

    你可以在CREATE事件中建立连接
      

  12.   

    问题是,我不想再Create事件中建立连接。。
      

  13.   


    function TForm1.getCon:Boolean; 
    begin//建立连接 
    try
      ClientSocket1.Active:=False; 
      ClientSocket1.Port:=5000; 
      ClientSocket1.Address:='127.0.1.1'; 
      ClientSocket1.Active:=True; 
      Result:=true;
    except
      Result:=false;
    end;
    end; 
    //1
    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      if getCon then ClientSocket1.Socket.SendText('test')
      else ShowMessage('error');
    end; 
    //2
    procedure TForm1.Button2Click(Sender: TObject); 
    begin 
      if getCon then ShowMessage('OK')  else ShowMessage('error');
      ClientSocket1.Socket.SendText('test');
    end; 
    能看看,这2个返回的情况吗?
      

  14.   

    你如果非要验证连接成功后接着发送消息  那就写个循环while not ClientSocket1.Active do 
    begin
      getCon;
      Sleep(1000);
    end;看会不会出现死循环
      

  15.   

    我看你是结不了帖了用SOCKET很少有这样连接后接着发送数据的  都是一开始创建窗体时建立连接  或单独建立连接要不然你换INDY试试
      

  16.   

    你看一下,ServerSocket有没有绑定端口号5000,再检查一下ServerSocket1.active有没有设置成true
    然后在ClientSocket 的onConnecting事件中添加StatusBar1.Panels[0].Text := 'connecting'(当然要先放一个StatusBar1到窗体中),在onconnect事件中写StatusBar1.Panels[0].Text := 'connected',来判断是否连接成功 
      

  17.   

    if ClientSocket1.connected then 
      ClientSocket1.Socket.SendText('test')
    else
      showmessage('连接不成功');
      

  18.   

    我是想让你在ShowMessage后再发送消息,也许等一下就出来了。