请问一对socket之间可以既用来传送数组又来传送文本吗,若行,对端怎样识别?

解决方案 »

  1.   

    用SendBuf和ReceiveBuf
    可以把数组或文本用一个结构体封装,
    再把整个结构体发送,根据标志判断是文本还是数组
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ScktComp;
    type myrecord = record
        Flag:Integer;
        Text:String;
        myArray:array[0..10] of Integer;
    end;
    type
      TForm1 = class(TForm)
        ServerSocket: TServerSocket;
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        ComboBox1: TComboBox;
        CheckBox1: TCheckBox;
        ClientSocket: TClientSocket;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ServerSocketClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var Command:myrecord;
    begin
        if CheckBox1.Checked then
        begin
            command.Flag := 0;
            command.Text := 'This is Text';
        end
        else
        begin
            command.Flag := 1;
            //初始化数组    end;
        ClientSocket.Socket.SendBuf(Command,SIZEOF(Command));
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        ServerSocket.Active := true;
        ClientSocket.Active := true;
    end;procedure TForm1.ServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var rec:myrecord;
        i: integer;
    begin
       Socket.ReceiveBuf(rec,Socket.ReceiveLength);
       if rec.Flag = 0 then
            Edit2.Text := rec.Text
       else
       begin
       for i := Low(rec.myArray) to High(rec.myArray) do
            ComboBox1.Items.Add(IntToStr(rec.myarray[i]))
       end;     
    end;end.