procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket.Host:=hostedit.Text;
ClientSocket.Port:=strtoint(portedit.Text);
ClientSocket.Open;
sleep(100);  //这里无论多少时间都一样
ClientSocket.Socket.SendText('abcd');
end;
服务器端始终收不到abcd
我用sniffer查看了发现没有发过abcd的包但是
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket.Socket.SendText('abcd');
end;
就可以收到
用sniffer发现有包

解决方案 »

  1.   

    你应该确保ClientSocket已经连接上,在进行发送
    ClientSocket应该有Connect事件,在里面判断是否连接成功,如果成功,则发送
      

  2.   

    应该是连上了,而且我用sniffer发现连接已经发起,然后sleep,但是执行到sendtext,没有发现发包.
    不过bdmh的建议不错,我一直钻了牛角
      

  3.   

    var
      timeout: integer;
    begin
      ClientSocket.Host:=hostedit.Text;
      ClientSocket.Port:=strtoint(portedit.Text);
      ClientSocket.Open;
      timeout := 0;
      while not ClientSocket.Socket.Connected and (timeout< 500) do
      begin
        Application.ProcessMessages;
        Sleep(1);
        inc(timeout);
      end;
      if ClientSocke.Socket.Connected then begin
        ClientSocket.Socket.SendText('abcd');
      end;
    end;//Open不等于已经建立连接了 
      

  4.   

    ClientSocket.Host:=hostedit.Text; 
    ClientSocket.Port:=strtoint(portedit.Text); 
    ClientSocket.Open; 
    sleep(100);  //这里无论多少时间都一样 
    Application.ProcessMessages;
    ClientSocket.Socket.SendText('abcd'); 
      

  5.   

    一楼说的对,在发送数据之前一定要加上判断
     if clientSocket.connected then
     begin
       clientSocket.sendText('asdf');
     end;