假设在局域网环境,双机通信,主机A和客户端B,现在要求,首先启动主机A,然后启动B,在B中能检测A是否已经开启(不知是否是在应用程序中使用ping命令),如果A开启,则输入A的IP地址,然后请求链接,当主机A收到客户端B的链接请求时,能查看B来自何IP,然后点接收按钮建立连接,或者发条消息给B提示,然后断开与B的连接。
使用TClientSocket、TServerSocket。Delphi 6
求例子,客户端和服务器源代码发到信箱[email protected]。不要仅给一点提示性的东西,谢谢,望哪位好心人帮忙

解决方案 »

  1.   

    可以去这里下载:
    http://www.delphibox.com/downloads.asp?subcatalogid=106&pageid=2这里有一个聊天用的。你去看看:
    http://www.delphibox.com/article.asp?articleid=91
      

  2.   

    http://www.playicq.com.cn/dispdocnew.php?id=21846注册一下,不要钱的
      

  3.   

    ksaiy(消失在人海,
    delphibox注册不了啊
      

  4.   

    根据你的意思,通讯协议用UDP协议,试着去查UDP协议的代码吧,或者到DELPHI合子去找。
      

  5.   

    连接时如何验证IP?你需要做何用途?是验证连接的IP是否为合法的IP还是要得到对方的IP地址?
      

  6.   

    princesd(中原) :
    想知道连接的IP是否在某个范围(可存放在数据库一个表中)
    就假设连接IP为192.168.0.10。192.168.0.99之间为合法IP,判断连接服务器的IP地址是否在此范围,如在则合法,否则断开其连接(最好是先发送一个提示信息过去再断开)
      

  7.   

    这个简单啊,首先上来的IP你应该很容易得到,ServerSocket1.Socket.RemoteAddress就能得到了,你去匹配一下你的数据库就可以知道是否合法了.
      

  8.   

    最简单的例子,我没加注释,不过很容易理解的.
    unit UChat;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, ComCtrls, ScktComp, Menus;type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        Listen1: TMenuItem;
        Connect1: TMenuItem;
        Close1: TMenuItem;
        ClientSocket1: TClientSocket;
        ServerSocket1: TServerSocket;
        StatusBar1: TStatusBar;
        Memo1: TMemo;
        Memo2: TMemo;
        Splitter1: TSplitter;
        Disconnect1: TMenuItem;
        procedure Listen1Click(Sender: TObject);
        procedure Close1Click(Sender: TObject);
        procedure Connect1Click(Sender: TObject);
        procedure Disconnect1Click(Sender: TObject);
        procedure Memo2KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure ClientSocket1Connect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
        procedure ServerSocket1ClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ServerSocket1Accept(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ServerSocket1ClientConnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocket1Disconnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure FormCreate(Sender: TObject);
        procedure ServerSocket1ClientDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      bListen,IsServer:Boolean;
      server:string;implementation{$R *.dfm}procedure TForm1.Listen1Click(Sender: TObject);
    begin
      bListen:=not bListen;
      if bListen then
      begin
        ClientSocket1.Active:=false;
        ServerSocket1.Active:=true;
        statusbar1.Panels[0].Text:='Listen...';
      end
      else
      begin
        if ServerSocket1.Active then
          ServerSocket1.Active:=false;
        StatusBar1.Panels[0].Text:='';
      end;
    end;procedure TForm1.Close1Click(Sender: TObject);
    begin
      ServerSocket1.Close;
      ClientSocket1.Close;
      Close;
    end;procedure TForm1.Connect1Click(Sender: TObject);
    begin
      if ClientSocket1.Active then
        ClientSocket1.Active:=False;
      if InputQuery('Connect Server','Server IP:',server) then
        if Length(server)>0 then
        begin
          ClientSocket1.Host:=server;
          ClientSocket1.Active:=true;
          //bListen:=false;
        end;
    end;procedure TForm1.Disconnect1Click(Sender: TObject);
    begin
      //ClientSocket1.Active:=false;
      //ServerSocket1.Active:=true;
      //StatusBar1.Panels[0].Text:='Listen...';
      ClientSocket1.Close;
      Listen1Click(nil);
    end;procedure TForm1.Memo2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key=VK_Return then
      begin
        if IsServer then
          ServerSocket1.Socket.Connections[0].SendText(Memo2.Text)
        else
          ClientSocket1.Socket.SendText(Memo2.Text);
        Memo2.Lines.Clear;
      end;
    end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      StatusBar1.Panels[0].Text:='Connect to'+Socket.RemoteHost;
    end;procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Memo1.Lines.Add('');
      Memo1.Lines.Add(Socket.ReceiveText); 
    end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Memo1.Lines.Add('');
      Memo1.Lines.Add(Socket.ReceiveText); 
    end;procedure TForm1.ServerSocket1Accept(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      IsServer:=true;
      StatusBar1.Panels[0].Text:='Connect to:'+Socket.RemoteAddress ;
    end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Memo1.Lines.Clear;
    end;procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Listen1Click(nil);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Listen1Click(nil);
    end;procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      ServerSocket1.Active:=false;
      bListen:=not bListen;
      Listen1Click(nil);
    end;end.
      

  9.   

    呵呵,其实也就一句话ServerSocket1.Socket.RemoteAddress
      

  10.   

    连接、发送消息我都会,就是不知道如何验证IP
    例如:
    当192.168.0.12的IP连接到服务器,我直接发送一条回复信息给它“不满足权限”,然后断开与它的连接。
    若干个IP来连接我的服务器,我让他们处于一个等待队列中(我同时保持10个连接),如旧连接断开,则替补进新的连接
    请问这上面两个功能如何实现?