procedure TForm1.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  sReviceMsg :String;
begin
  sReviceMsg:= Socket.ReceiveText;
  Showmessage('测试成功!');
  if ClientSocket1.Socket.Connected then begin
    ClientSocket1.Socket.SendText(sReviceMsg);
  end;
end;
为什么这样可以成功ClientSocket1.Socket.SendText(sReviceMsg);而不加Showmessage('测试成功!'); 却发送不了呢....

解决方案 »

  1.   

    根本不影响嘛而且Showmessage('测试成功!');
    在这里根本没用,因为sReviceMsg:= Socket.ReceiveText;无论是收到消息还是没有收到 Showmessage('测试成功!');
    这句都会执行
      

  2.   

    我想你是没看懂,, 也可能我没想明白~我的代码呢,去掉"Showmessage('测试成功!');"这一句.  "ClientSocket1.Socket.SendText(sReviceMsg);"不执行.加上才执行, 但我也不能老让他弹这玩意阿...
      

  3.   

      if ClientSocket1.Socket.Connected then begin
        ClientSocket1.Socket.SendText(sReviceMsg);
      end;
    这句是不需要加判断的
    ClientSocket 在封装的时候已经做过处理的
    所以你直接 ClientSocket1.Socket.SendText(sReviceMsg);
    就可以了甚至你可以
    ClientSocket1.Socket.SendText(Socket.ReceiveText);
      

  4.   

    还有就是 因为你本来就是 ClientSocket本身的事件
    所以你可以直接
    Socket.SendText(Socket.ReceiveText);不需要 ClientSocket1.
      

  5.   

     ..ClientSocket1是另一个ip和端口, 我用返回的socket更不行了..
      

  6.   

    ...
    你不会是在一个程序上 有 Server 又有 Client 吧。。
      

  7.   

    Server 就可以接收和发送 为什么还要弄个 ClientSocket ?
      

  8.   

    估计是在执行ClientSocket1.Socket.SendText(sReviceMsg); 时, ClientSocket还没连接成功。加上 Showmessage('测试成功!'); 之后, 给了ClientSocket足够时间去连接成功。改成下面这样试试(不是最佳答案,只是有解决一些问题):procedure TForm1.ServerSocketClientRead(Sender: TObject;  Socket: TCustomWinSocket);
    var
      sReviceMsg :String;
      iWait : Integer;
    begin
      sReviceMsg:= Socket.ReceiveText;
      iWait := 0;
      while not ClientSocket1.Socket.Connected and (iWait < 500) do
      begin
        Application.ProcessMessages;
        Sleep(10);
        inc(iWait);
      end;
      if ClientSocket1.Socket.Connected then begin
        ClientSocket1.Socket.SendText(sReviceMsg);
      end;
    end;
      

  9.   

    刚刚睡醒, ~  感谢这位大哥, 不过您这个方法我也试过了.  从Sleep10到Sleep3000, 都试过呢~不弹那东西就是不好使
      

  10.   


    首先ServerSocket接受本机的一个网络连接, 然后利用ClientSocket 转发到另一台电脑上..
      

  11.   

    光写个Sleep(3000)是没用的, sleep会阻塞主进程, 这样ClientSocket是不会Connect成功的。
      

  12.   

     抱歉, 刚刚有点事, 测试有点晚了. 您说的方法我试了. 真的好用了! 太感谢了. . 奇怪, 你的也是sleep,咋就好使了捏