小弟用Winsock Expert截取了两段封包如下:
 
(客户端程序发送):
Status   PacketsHex
send     00 00 00 00 00 00 00 00 01 99 26 D3 65 95服务器程序返回:
Status   PacketsHex
send     00 00 00 00 00 00 00 00 01 01 CA 67 40 CC服务端监听端口:5023请教如何用Delphi7 实现一个自己的服务端程序模拟上述过程?小弟诚求实例代码,Indy ,winsock 均可。 望各位老大予以相助,大恩不言谢!

解决方案 »

  1.   

    TO:DDGG(叮叮当当)
    你说的很对, 客户端数据,服务端数据只有1种 而且数据都是固定的
      

  2.   

    新建一个 Project,在 Form1 上放置:
    1个TClientSocket :命名为SockClient
    1个TServerSocket :命名为SockServer
    以上两个控件在 Internet 面板中
    1个TButton :命名为Button1双击 Button1,贴入以下代码,并设置 SockServer 控件的 OnClientRead 事件处理程序为 SockServerClientRead。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ScktComp;type
      TForm1 = class(TForm)
        SockClient: TClientSocket;
        SockServer: TServerSocket;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure SockServerClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure Button1Click(Sender: TObject);
      private
        function Frame2Hex(const Frame: string): string;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      G_Buf: string;  // 全局接收缓存区implementationconst
      REQ = #$00#$00#$00#$00#$00#$00#$00#$00#$01#$99#$26#$D3#$65#$95;
      ASW = #$00#$00#$00#$00#$00#$00#$00#$00#$01#$01#$CA#$67#$40#$CC;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      SockServer.Port := 5023;
      SockServer.Active := True;
    end;procedure TForm1.SockServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    // 服务器端的接收事件
    begin
      G_Buf := G_Buf + Socket.ReceiveText;  // 收取客户端发来的数据
      if Pos(REQ, G_Buf) > 0 then           // 是否完整收到请求帧?
      begin
        G_Buf := '';                        // 清空缓存
        Socket.SendText(ASW);               // 发送固定应答
        ShowMessage('收到 ' + Frame2Hex(REQ) + #13#10'应答 ' + Frame2Hex(ASW));
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      SockClient.Host := 'localhost';
      SockClient.Port := 5023;
      SockClient.Active := True;               // 连接服务器
      while not SockClient.Socket.Connected do // 等待连接成功
        Application.ProcessMessages;
      SockClient.Socket.SendText(REQ);         // 发送请求帧
    end;function TForm1.Frame2Hex(const Frame: string): string;
    var
      i: Integer;
    begin
      Result := '';
      for i:=1 to Length(Frame) do
        Result := Result + IntToHex(Byte(Frame[i]), 2) + ' ';
    end;end.