客户端clientsocket如何去接收serversocket端的主动发过来的信息,我用clientsocket的onread去接收,但是没有反应,请高手赐教,万分感谢!!!

解决方案 »

  1.   

    http://www.playicq.com/dispsoft.php?id=406
    兄弟看過來....
      

  2.   

    to: zhouhuilun(我是新手) 
    http://www.playicq.com/dispsoft.php?id=406
    給你的網站是已經開發成型的軟件(聊天)......
      

  3.   

    :(
    我就想知道clientsocket是怎么接收serversocket主动发送过来的信息的!
      

  4.   

    unit ServerUnit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ScktComp, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        MyServer: TServerSocket;
        LogMemo: TMemo;
        Panel1: TPanel;
        Label1: TLabel;
        PortEdit: TEdit;
        StartButton: TButton;
        StopButton: TButton;
        procedure StartButtonClick(Sender: TObject);
        procedure StopButtonClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure MyServerClientConnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure MyServerClientDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
      private
        { Private declarations }
      public
        { Public declarations }
        ConnectedList: TStringList;
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.StartButtonClick(Sender: TObject);
    begin
        if  PortEdit.Text = '' then
            MyServer.Port := 1971
        else
            MyServer.Port := StrToInt(PortEdit.Text);    Caption := IntToStr(MyServer.Port);
        MyServer.Active := true;
        StopButton.Enabled := true;
        StartButton.Enabled := false;
        PortEdit.Enabled := false;
    end;procedure TForm1.StopButtonClick(Sender: TObject);
    begin
        MyServer.Active := false;
        StartButton.Enabled := true;
        StopButton.Enabled := false;
        PortEdit.Enabled := true;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        ConnectedList := TStringList.Create;
    end;procedure TForm1.MyServerClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        LogMemo.Lines.Add(Socket.RemoteAddress + ' has connected.');
        ConnectedList.AddObject(Socket.RemoteAddress, Socket);
    end;procedure TForm1.MyServerClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        LogMemo.Lines.Add(Socket.RemoteAddress + ' has disconnected.');
        //SendMessage(Format('%s has disconneted.',OPENARRAY(TVarRec,(ConnectedList.Strings[ConnectedList.IndexOfObject(Socket)]))),'Server');
        ConnectedList.Delete(ConnectedList.IndexOfObject(Socket));
    end;end.
      

  5.   

    Socket.ReceiveBuf
    Socket.ReceiveText
      

  6.   

    本来想找一个完整的给你,但一时不知道方哪儿去了?不过Delphi自己好像自带的有一个程序,好像叫Chat,你查查看。
      

  7.   

    var
      FSocketStream:TWinsocketStream;
    begin
      FSocketStream:=TWinsocketStream.Create(ClientSocket.Socket,Ftimeout);
    /.....
      

  8.   

    procedure TCMPPTest.CMPPClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      CommandID:longword;
      Recv1,Recv2:integer;
    begin
      fillchar(RHead,sizeof(RHead),0);
      Recv1:=socket.ReceiveBuf(RHead,Sizeof(RHead));
      CommandID:=ntohl(RHead.Command_ID);
      if CommandID=CMPP_TERMINATE_RESP then
         begin
            memo2.Lines.Add('********接收到断开请求*******');
            fillchar(SHead,sizeof(SHead),0);
            SHead.Total_length:=htonl(sizeof(SHead));
            SHead.Command_ID:=htonl(CMPP_TERMINATE_RESP);
            SHead.Sequence_ID:=RHead.Sequence_ID;
            socket.SendBuf(SHead,sizeof(SHead));
         end;end;你看我这段有错吗??
    当服务端发送信息时,却收不到!不知道为什么??
      

  9.   

    我知道了,我的clientsocket的clienttype是选择的ctblocking方式,所以clientsocket的onread没用,如果我用ctnonblocking方式,我用什么办法能主动接收来自服务端的消息??