设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1284|回复: 5

[原创] [Delphi]读取CS服务器的一些信息 [复制链接]

Rank: 3Rank: 3

帖子
195
精华
0
声望
762 点
金币
155 Mold
被赞许
0 次
注册时间
2009-7-3
发表于 2010-8-26 07:06:53 |显示全部楼层
啊写的很烂- -! 不过咱要求很低 能用即可



  1. type
  2.   TCSQueryPackage= packed record  // 大小25字节
  3.     Head:Dword; //一般为 $FFFFFFFF  长度4
  4.     Data:array [0..20] of Char; //一般情况下是:TSource Engine Query 最后#0来结束 长度21
  5.   end;


  6. var
  7.   Form1: TForm1;
  8.   CSQuery:TCSQueryPackage;


  9. implementation

  10. {$R *.dfm}

  11. function GetArray(Buf:Pointer; Len:Integer):TStringList;
  12. var
  13.   I:Integer;
  14.   Info:TStringList;
  15.   Temp:string;
  16.   Buffer:PAnsiChar;
  17. begin
  18.   Info:=TStringList.Create;
  19.   Buffer:=PAnsiChar(Buf);
  20.   Info.Clear;
  21.   For I:=5 to Len do
  22.   begin
  23.     if (Buffer[I] = #0) and (Buffer[I+2] <> '/')then //当前人数 人数上限 后面是/dw 也算是一个标记吧如果不这样的话当人数为0就 - -!
  24.     begin
  25.      Info.Add(Temp);
  26.      Temp:='';
  27.     end else begin
  28.      if (Info.Count = 5) and (Buffer[I+2] = '/') then
  29.      begin
  30.         Temp:= IntToStr(Ord(Buffer[I])) + '/';
  31.         Temp:= Temp + IntToStr(Ord(Buffer[I+1]));
  32.         Info.Add(Temp);
  33.         Break; // 得到人数后就可以跳出了 后面的是几个url地址变量没用
  34.      end else  Temp := Temp + Buffer[I];
  35.     end;
  36.   end;
  37.   Result:=Info;
  38. end;

  39. procedure TForm1.IdUDPServerUDPRead(Sender: TObject; AData: TStream;
  40.   ABinding: TIdSocketHandle);
  41. var
  42.   Buf:Pointer;
  43.   I:Integer;
  44.   Len:Integer;
  45.   Info:TStringList;
  46. begin
  47. Len:= AData.Size;
  48. GetMem(Buf,Len);
  49. try
  50.   AData.ReadBuffer(Buf^,Len);
  51.   if (PAnsiChar(Buf)[4] = 'm') then  // 如果返回包是HLDS的 那么第5直接就是小写m 前4直接全是$FFFFFFFF 数组是从0开始
  52.   begin
  53.     Info:= GetArray(Buf,Len);
  54.     for I:=0 to Info.Count-1 do
  55.     begin
  56.       Memo.Lines.Add(UTF8Decode(Info.Strings[I]));
  57.     end;
  58.     Info.Free;
  59.   end;                        
  60. finally
  61.   FreeMem(Buf);
  62. end;
  63. end;

  64. procedure TForm1.Button1Click(Sender: TObject);
  65. begin
  66.   CSQuery.Head:= $FFFFFFFF;
  67.   StrCopy(@CSQuery.Data[0],'TSource Engine Query');
  68.   IdUDPServer.SendBuffer(Edit1.Text,StrToInt(Edit2.Text),CSQuery,25);
  69. end;
复制代码
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 1 人评分声望 金币 收起 理由
Marshal + 80 + 50 精品文章

总评分: 声望 + 80  金币 + 50   查看全部评分

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
2836
精华
2
声望
12984 点
金币
2999 Mold
被赞许
28 次
注册时间
2006-4-28

Mod中国同盟社至高荣誉

发表于 2010-8-26 08:31:59 |显示全部楼层
很不错啊,源码开放了~

使用道具 举报

Honorary Member

地狱恶势力

Rank: 7Rank: 7Rank: 7

帖子
3449
精华
4
声望
15019 点
金币
2052 Mold
被赞许
90 次
注册时间
2010-4-4

Modchina灌水王 可爱小猫 懒人勋章

发表于 2010-8-26 08:53:40 |显示全部楼层
比起连这些都不会的我来说已经是很好了

使用道具 举报

Rank: 1

帖子
5
精华
0
声望
94 点
金币
20 Mold
被赞许
0 次
注册时间
2010-9-24
发表于 2010-9-24 22:43:46 |显示全部楼层
我需要哈哈哈哈

使用道具 举报

Rank: 3Rank: 3

帖子
81
精华
0
声望
769 点
金币
48 Mold
被赞许
0 次
注册时间
2009-5-20
发表于 2010-10-16 13:54:41 |显示全部楼层
很不错啦 ~  

使用道具 举报

Rank: 3Rank: 3

帖子
40
精华
0
声望
688 点
金币
253 Mold
被赞许
0 次
注册时间
2008-11-5
发表于 2010-10-21 06:36:00 |显示全部楼层
这个好像是见过。。。?

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部