我要用Socket控件写一个文本聊天程序。请问该如何下手,请帮忙讲讲谢谢大家!

解决方案 »

  1.   

    标题出60分,结果只给了50分,呵呵www.2ccc.com有源码啊,自己下载了看
      

  2.   

    你在www.2ccc.com里面搜索一下“聊天”就看到了啊
      

  3.   

    您好,我刚刚看了,上面好像没有用socket控件写的程序
      

  4.   

    那你下载这个源码吧http://www.tomore.com/1/34342.html下面是下载地址
    http://down1.tomore.com/source/20051011/2005101119182510556.rar
      

  5.   

    unit server;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, SUIButton, StdCtrls, SUIMemo, ExtCtrls, SUIForm, ScktComp;type
      TForm_server = class(TForm)
        suiForm1: TsuiForm;
        GroupBox1: TGroupBox;
        suiMemo_read: TsuiMemo;
        GroupBox2: TGroupBox;
        suiMemo_send: TsuiMemo;
        suiButton1: TsuiButton;
        ServerSocket1: TServerSocket;
        suiButton2: TsuiButton;
        procedure ServerSocket1ClientConnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure FormCreate(Sender: TObject);
        procedure suiButton1Click(Sender: TObject);
        procedure ServerSocket1ClientDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure ServerSocket1ClientRead(Sender: TObject;
          Socket: TCustomWinSocket);    procedure ServerSocket1Listen(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure suiButton2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form_server: TForm_server;
      SockPool:TList;
    implementationuses client;{$R *.dfm}procedure TForm_server.ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        SockPool.Add(Socket);
        //self.suiMemo1.Lines.Add('Client Connected:'+Socket.RemoteAddress);
    end;procedure TForm_server.FormCreate(Sender: TObject);
    begin
        SockPool:=TList.Create;
      //  form_client.Show;
    end;procedure TForm_server.suiButton1Click(Sender: TObject);var
      i,len:word;
      msg:string;
      buf:array of char;
    begin
       msg:=Trim(self.suiMemo_send.Text);
       len:=length(msg);
       setlength(buf,len+2); //设置buf长度 //前两个字节存放消息体内容长度
       Move(len, buf[0], 2) ; //把消息体内容长度放入前两个字节
       Move(msg[1], buf[2], len);  //把消息体内容放入包中  从第三个字节开始存放
       if SockPool.Count < 1 then Exit;           //tlist
       for i:=0 to  SockPool.Count -1 do
       try
         TCustomWinSocket(SockPool[i]).SendBuf(buf[0], len+2);
       except
         TCustomWinSocket(SockPool[i]).Close;
         SockPool.Remove(SockPool[i]);
       end;
    end;
    //end;procedure TForm_server.ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        SockPool.Remove(Socket);
    end;procedure TForm_server.FormClose(Sender: TObject;
      var Action: TCloseAction);
    Var
      i:Integer;
    begin
      For i:=SockPool.Count-1 DownTO 0 do
        SockPool.Delete(i);
      FreeAndNil(SockPool);
    end;procedure TForm_server.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      len:Word;
      Buf : array of char;
      Msg : String;
    begin   //收到一次信息后  还会侦听一次
      try
        Socket.ReceiveBuf(len,2);      //前两个字节存放消息体内容长度
        if Len < 1 then Exit;
        SetLength(buf,len);
        Socket.ReceiveBuf(Buf[0],len);
        setlength(msg, len);
        move(buf[0],Msg[1],len);
        //if msg='' then Exit;
        self.suiMemo_read.Lines.Add(Socket.LocalHost+':'+Msg);
        len :=0;
      except  end;  
    end;procedure TForm_server.ServerSocket1Listen(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        //self.suiMemo1.Lines.Add('Listen:'+Socket.RemoteAddress);
    end;procedure TForm_server.suiButton2Click(Sender: TObject);
    begin
        self.close;
        form_client.Close;
    end;end.
      

  6.   

    最简单的是delphi自带的chat例子,呵呵