procedure TFm_main.Button1Click(Sender: TObject);
var
  return_text:string;
begin
  label5.Caption:='交易包字串总长度:'+inttostr(length(trim(Edit3.Text)));
  try
     I:=0;
     clientsocket1.Close;
     clientSocket1.Address:=edit1.Text;
     clientSocket1.Port:=strtoint(edit2.text);
     clientsocket1.ClientType:=ctBlocking;
     clientSocket1.Open;
     while    fm_main.ClientSocket1.Active do fm_main.ClientSocket1.Socket.SendText(edit3.text);
     Fm_main.Memo1.Lines.Add('转格式:'+edit3.text);
     while fm_main.ClientSocket1.Socket.ReceiveLength = 0 do
          Application.ProcessMessages;
     return_text:=fm_main.ClientSocket1.Socket.ReceiveText;
     fm_main.Memo1.Lines.Add('1'+return_text);
     fm_main.ClientSocket1.Close;  except
     showmessage(edit1.text+#13#10+'未开机或未安装服务程序');
  end;
end;
对方服务是linux 下标C写的。我采用ctBlocking死活接不到对方的的返回包。有没有这方面的源代码啊。跪求。高分送

解决方案 »

  1.   

    你这句是死循环啊,一直到链接断开
    while         fm_main.ClientSocket1.Active   do   fm_main.ClientSocket1.Socket.SendText(edit3.text); 
      

  2.   

    我把while   fm_main.ClientSocket1.Active       do  去掉了。还是不行啊。
      

  3.   

    网络 上讲要用TWinSocketStream,有没有这方面的例子啊。
      

  4.   

    procedure   TFm_main.Button1Click(Sender:   TObject); 
    var 
        return_text:string; 
    begin 
        label5.Caption:='交易包字串总长度:'+inttostr(length(trim(Edit3.Text))); 
        try 
              I:=0; 
              clientsocket1.Close; 
              clientSocket1.Address:=edit1.Text; 
              clientSocket1.Port:=strtoint(edit2.text); 
              clientsocket1.ClientType:=ctBlocking; 
              clientSocket1.Open; 
              while         fm_main.ClientSocket1.Active   do 
             begin 
             fm_main.ClientSocket1.Socket.SendText(edit3.text); 
              Fm_main.Memo1.Lines.Add('转格式:'+edit3.text); 
              while   fm_main.ClientSocket1.Socket.ReceiveLength   =   0   do 
                        Application.ProcessMessages; 
              return_text:=fm_main.ClientSocket1.Socket.ReceiveText; 
              fm_main.Memo1.Lines.Add('1'+return_text); 
              end;
              fm_main.ClientSocket1.Close;     except 
              showmessage(edit1.text+#13#10+'未开机或未安装服务程序'); 
        end; 
    end; 
      

  5.   

    用indy ,我最近就做了一个这样的 对方也是 linux 下的c写的 嵌入
      

  6.   

    我用delphi 做的socket 发送消息,unix用c写的接收server.
    下面是client的:procedure TForm1.Button1Click(Sender: TObject);
    const    blocklen = 1024*8;
    var Fby : file of byte;
        blnum,relen : integer;
        blbuf : array[0..blocklen] of char;
        i : integer;
        sl : integer;
        client : tsocket;
        ca : SOCKADDR_IN;
        Haddr : u_long;
        msg : string;
        wsstatus: integer; //winsocket_status;
        rece: TWSAData; //type:WSAData;
        ver : integer;
        blen : integer;
    begin
    ver:= 10101010;
    wsstatus := WSAStartup(ver, rece);
    client := Socket(AF_INET,SOCK_STREAM,0);if (client = INVALID_SOCKET) then
    begin
      showmessage('socket create error!');
      exit;
    end;msg := '00010';
    msg := msg + 'A'; //A or B
    msg := msg + '11111222223333344444';  //20位
    msg := msg + memo1.Text;msg :=fillleft(inttostr(length(msg)),'0',5)+copy(msg,6,length(msg));//showmessage(msg);ca.sa_family := PF_INET;ca.sin_port := htons(strtoint(edit2.Text));
    Haddr := inet_addr(pchar(trim(edit1.Text)));if ( Haddr = -1 ) then
    begin
      showmessage('ip is error');
      closesocket(client);
      exit;
    end
    else
    begin
      ca.sin_addr.S_addr:= Haddr;
    end;if (connect(Client,ca,sizeof(ca)) <> 0) then
    begin
       showmessage('连接服务器失败');
       exit;
    end;{
    //msg 转换成 blbuf
    //搞定,必须是msg的第1位开始,第0位应该是'0/'
    for i :=0 to length(msg)-1 do
    begin
      blbuf[i]:=msg[i+1];
    end; }//msg:=dostounix(msg);
    strcopy(blbuf,pchar(msg));//blbuf := pchar(msg);
    blen :=length(msg);
    sl := send(client,blbuf,blen,0);if (sl <= 0) then
    begin
      closesocket(client);
      exit;
    end;
    end;
      

  7.   

    delphi的网络控件不是很可靠,最好用api吧。
      

  8.   

    delphi的网络控件不是很可靠,最好用api吧。
    ====================================
    不可靠是因为不会使用。要能够用好API的人,同样也能够用好这些网络控件。
      

  9.   

    Don't use it in main thread if you use blocking mode.Create thread to handle send/receive event while you use blocking mode. You can refer to Indy source code for how to use blocking mode.