请教大侠,ClientSocket 非阻塞长连接,能通过流发送数据吗?
如果能,是什么类型的流?
还有把下面的包数据能过什么方式存入一个stream里?
如:
  a:=packed record
    b:array [0..10] of char;
    c:longword;
    d:word;
  end;
  .......
  b:a;
  Stream1:TStream;
  .........
  stream1:=TStream.Create;
  ..........
  //该怎样把a存入stream1????
很急呀,请大侠一定帮帮,万分感谢
  

解决方案 »

  1.   

    为什么要存入流再发?
    直接发就是了
    Socket.SendBuf(b, Sizeof(B));recv:
    FillChar(B, SizeOf(B), 0);
    Socket.ReceiveBuf(b, SizeOf(B));Stream:
      Stream.WriteBuffer(B, SizeOf(B));
      

  2.   

    服务端是用流接收的,
    能不能这样?
      ClientSocket1.socket.SendStream(stream1);
      

  3.   

    再请问一下
      Stream.SendBuffer和Stream.WriteBuffer是功能是什么?
      如果WriteBuffer是将包数据存入Stream,那SendBuffer是什么用?
      

  4.   

    你说的可以接收都是用Socket.ReceiveBuf
    发送才有这个SendStream,SendStream其时也就是用sendBuf的功能来的。
    (感觉Borland在误导,有个SendBuf,再弄个SendStream以为什么都能做)
      

  5.   

    基本的流操作有: Stream.Read, Write, ReadBuffer, WriteBuffer
    其中ReadBuffer/WriteBuffer的操作是对Read/Write的封装,确定了Read/Write的Count一定成功,否则程序异常。Socket.SendBuf/ReceiveBuf你都要我说?
    收/发数据了。它的操作和流差不多,只是对象是网络套接字,网络套接字不明白的话,可以理解为ClientSocket1/ServerSocket
      

  6.   

    :) 谢谢 copy_paste(木石三) 
    那我能不能这样
    procedure TForm1.Button1Click(Sender: TObject);
    var
      stream1:TStream;
      b:a
    begin
        stream1:=TStream.Create;
        stream1.WriteBuffer(b,SizeOf(b));
        if not ClientSocket1.Active then
        begin
          memo1.Lines.Add('客户端没有打开');
          exit;
        end;
        FillChar(b,SizeOf(b));
        b.b:='abc';
        b.c:=1234567890;
        b.d:=2;
        stream1.WriteBuffer(b,sizeof(b));
        ClientSocket1.socket.SendStream(stream1);
    end;
      

  7.   

    showmessage(inttostr(stream1.position));
    stream1.position := 0;
    ClientSocket1.socket.SendStream(stream1);