DELPHI的安装目录下有个CHAT的例子,能解决你的问题

解决方案 »

  1.   

    http://www.csdn.net/expert/topic/844/844946.xml?temp=.1231958上面有我帖的一个传送东西的例子,你看看。
      

  2.   

    远程监控程序的一段
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      MyBuffer: array[0..10000] of byte; {设置接收缓冲区}
      MyReceviceLength: integer;
      S: string;
      MyBmp: TBitmap;
      MyJpg: TJpegimage;  MyRect,MyLect : TRect;begin
      MyRect := Rect(0,0,800,600);
      Mylect := Rect(0,0,700,500);  StatusBar1.SimpleText := '正在接收数据......';
      if MySize = 0 then {MySize为服务端发送的字节数,如果为0表示为尚未开始图象接收}
      begin
        S := Socket.ReceiveText;
        MySize := Strtoint(S); {设置需接收的字节数}
        Clientsocket1.Socket.SendText('ready'); {发指令通知服务端开始发送图象}
      end
      else
      begin {以下为图象数据接收部分}
        MyReceviceLength := socket.ReceiveLength; {读出包长度}
        StatusBar1.SimpleText := '正在接收数据,数据大小为:' + inttostr(MySize);
        Socket.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}
        MyStream.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
        if MyStream.Size >= MySize then {如果流长度大于需接收的字节数,则接收完毕}
        begin
          MyStream.Position := 0;
          MyBmp := tbitmap.Create;
          MyJpg := tjpegimage.Create;
          try
            MyJpg.LoadFromStream(MyStream); {将流中的数据读至JPG图像对象中}
            MyBmp.Assign(MyJpg); {将JPG转为BMP}
            StatusBar1.SimpleText := '正在显示图像';
            Image1.Picture.Bitmap.Assign(MyBmp); {分配给image1元件 }    //    IMage1.Canvas.CopyRect(MyRect,MyBmp.Canvas,Mylect);      finally {以下为清除工作 }
            MyBmp.free;
            MyJpg.free;
            Button2.Enabled := true;
    { Socket.SendText('cap');添加此句即可连续抓屏 }
    //        Socket.SendText('cap');
            MyStream.Clear;
            MySize := 0;
          end;
        end;
      end;
    end;
      

  3.   

    DELPHI上的socket我没用过,但socket在各种语言里的用法都大同小异——否则也不叫socket了Server:SOCKET s = socket(AF_INET,SOCK_STREAM,PF_INET);
    sockadd_in add;
    add.family = AF_INET;
    add.sin.port = ??
    add.sin.add = 0 或者你某一个网卡的地址
    bind(s,add,sizeof(add));listen(s,0,5);SOCKET t = accept(s);
    char buf[1000];
    recv(t,buf,1000);
    if(buf[0] == '1')
      send(t,"hello",strlen(hello)+1);
    recv(t,buf,1000);
    assert(buf[0] == '1');close(s);
    close(t);Client:
    SOCKET s = socket(AF_INET,SOCK_STREAM,PF_INET);
    sockadd_in add;
    add.family = AF_INET;
    add.sin.port = 0
    add.sin.add = 0 或者你某一个网卡的地址
    bind(s,add,sizeof(add));connect(s,serveradd);send(s,"1",1);
    char buf[1000];
    recv(s,buf,1000);
    if( string(buf) == string("hello"))
      send(s,"1",1);close(s);
      

  4.   

    是TCP的握手吗?不用你去实现。SOCKET应用就是建立在TCP/UDP/IP之上的。