我现在在服务器端有一个listview,里面的内容是客户端想要得到的内容.现在不知道如何通过ServerSocket将listview的内容SendText给客户端,并且客户端在接收到之后显示在客户端的listview中?

解决方案 »

  1.   

    服务端监听客户端的请求,接受到客户端的Socket请求时就把ListView里的内容按一定格式发给客户端,客户端接受到后解析出内容再显示
      

  2.   

    如果ListView当中的内容是可存储并还原的,就可以。否则无法实现。Items[0]:Caption[,SubItems[0][,SubItems[1][,...[,SubItems[M]]]]][,Data][,Checked][,ImageIndex]
    Items[1]:Caption[,SubItems[0][,SubItems[1][,...[,SubItems[M]]]]][,Data]][,Checked][,ImageIndex]
    ...
    Items[N]:Caption[,SubItems[0][,SubItems[1][,...[,SubItems[M]]]]][,Data]][,Checked][,ImageIndex]也就是一个二维表格。这就是最基本的ListView数据,只是这个二维表格是不规则的。SubItems可有可无,也可能是不确定的M项。还有一个可有可无的,可以存任何类型的是Data。除此之外还有Checked属性,以及ImageIndex(如此有,可能需要将整个ImageList的图片都进行传输)等。
      

  3.   

    可采用序列化控件存储成流,然后把流发送到客户端,客户端控件就从服务端接收的流还原。
    以下是网络上转摘的代码。procedure TForm1.SaveComponent;
    var
      Stream: TFileStream;
    begin
      Stream := TFileStream.Create('c:\temp\mycomponent.dat', fmCreate);
      try
        Stream.WriteComponent(MyComponent);//此处可以修改一下,即把stream发送给客户端。
      finally
        Stream.Free;
      end;
    end;
     
    Example of loading a component from the file:
    以下是从文件读取流,修改成从socket接收即可。
    procedure TForm1.F;
    var
      Stream: TFileStream;
      MyComponent: TComponent;
    begin
      Stream := TFileStream.Create('c:\temp\mycomponent.dat', fmOpenRead);
      try
        Stream.ReadComponent(MyComponent);
      finally
        Stream.Free;
      end;
    end;
      

  4.   

    服务段如何知道Strem是否已经发完
    tcp有粘包 如何处理