小弟用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 均可。 望各位老大予以相助,大恩不言谢!
(客户端程序发送):
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种 而且数据都是固定的
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.