首页 新闻 电脑 时尚 旅游 企业 商城 房产 招聘 求职 博客 电视 音乐 游戏 摄影 读书 健康 动漫 问答 公益 短信 交友 论坛
::您所在的位置:池州人网 > 电脑网络 > 应用软件 > 正文
关 键 字:
Socket通信编程 有详细注释的代码
http://www.chizhouren.com 2006-2-24 20:27:17 im286  浏览:
服务端主窗体代码
unit Unit_server;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, ExtCtrls,Unit_GlobalVar;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Memo1: TMemo;
    SSock: TServerSocket;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SSockGetThread(Sender: TObject;
      ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation
uses
  Unit_operateThread;
{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  SSendList:=TList.Create; //在一开始就把线程创建
  SReivList:=TList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SSock.Active:=true;   //打开服务器
end;

procedure TForm1.SSockGetThread(Sender: TObject;ClientSocket: TServerClientWinSocket;var SocketThread: TServerClientThread);
var
  VOpertThrd:operateThread;          //声明线程句屏
begin
  memo1.Lines.Add(有一客户端连入系统);
  VOpertThrd:=operateThread.Create(false,ClientSocket); //创建线程并启动线程,还要传入客户端套解字
end;
end.
线程里的代码
unit Unit_operateThread;

interface

uses
  Classes,SysUtils,ScktComp,Unit_GlobalVar;

type
  operateThread = class(TServerClientThread)
  private
    FStr:    string;
  protected
    //procedure Execute; override;
    procedure ClientExecute;override;
    public
    procedure ShowMsg;
    function recvCommHead (var ACommHead:TCommHead):integer;
    function recvCommBody (var ATommPack:TCommPack):integer;
    function SendCommPack(var ATommPack:TCommPack):integer;
  end;

implementation
uses
  Unit_server;
{ operateThread }

procedure operateThread.ClientExecute;
var
  VReceComm :TCommPack;  //只声明一个包和一个结构体
  VReceRole :TTRole;

begin
// inherited;
repeat
    FStr := 读写....;
    synchronize(showMsg);     //与窗体同步添加显示
    recvCommHead(VReceComm.ACommHead);        //读包头注意传入的是整包的包头
    recvCommBody(VReceComm);                 //传进整包
    //复制收到的包体到结构体中,注意从整包中包体的0地址开始读, 大小是刚刚接收到的包头你的数据
    move(VReceComm.ACommBody[0],VReceRole,VReceComm.ACommHead.ACommSize);
    FStr:=角色编号+VReceRole.SrcRNo+角色名称+VReceRole.SrcRName+角色说明+VReceRole.SrcRMemo;
    synchronize(showMsg);
    sleep(3000);
until terminated;
end;
//********************************************************************
function operateThread.recvCommBody(var ATommPack: TCommPack): integer;
var
  RecvHBuf :array[0..Const_MaxPackSize-1] of char;  //注最大值
  iResult:Integer;
begin
  iResult:=0;
  fillchar(RecvHBuf,Const_MaxPackSize,#0);   //清空接受的缓冲区
  //用系统的保存的客户端套接字接受客户段内容,保存到暂存缓冲区
  iResult:=ClientSocket.ReceiveBuf(RecvHBuf,ATommPack.ACommHead.ACommSize);
  //把缓冲区的数据从0开始复制到整体包的包体中,大小在前面接收到的包体中
  move(RecvHBuf[0],ATommPack.ACommBody[0],ATommPack.ACommHead.ACommSize);
  result:=iResult;
end;
//********************************************************************
//接包头的注释可参见包体的注释
function operateThread.recvCommHead(var ACommHead: TCommHead): integer;
var
  RecvHBuf :array[0..Const_MaxPackSize-1] of char;
  iResult:Integer;
begin
  iResult:=0;
  fillchar(RecvHBuf,Const_MaxPackSize,#0);
  iResult:=ClientSocket.ReceiveBuf(RecvHBuf,sizeof(TCommHead));
   move(RecvHBuf[0],ACommHead,sizeof(TCommHead));
  result:=iResult;
end;
//********************************************************************
function operateThread.SendCommPack(var ATommPack: TCommPack): integer;
begin

end;
//********************************************************************
//线程与窗体的同步过程
procedure operateThread.ShowMsg;
begin
  Unit_server.Form1.Memo1.Lines.Add(FStr);
end;

end.

(编辑:chizhouren) 进入论坛交流】【留言评论】【打印网页】【关闭窗口】【↑顶部
  + 相关信息咨讯
 ·[分享]光影魔术手注册机
 ·QQ号码激活的常见问题解答与案例分析
 ·轻松玩抠图:图像去除背景方法与技巧
 ·QQ2006 Beta3发布了!新功能真不少
 ·无中生有!MaxiVista扩展你的显示空间
 ·QQ2006 beta3将捆绑QQ音速游戏资料
 ·解除下载限制,畅游网吧
 ·Live Messenger最终版如期推出
 ·实用PS技巧!大头像摇身变为超级海报
 ·FlashGet实用技巧三则
版权与免责声明:
1.凡本网注明来源为“池州人网”的所有作品,包括文字与图片,未经本网授权不得转载。违反上述声明者,本网将依法追究法律责任。
2. 凡注明"来源:xxx(非本站)"的作品,均转载自其它媒体,本网转载的目的在于传播更多信息,此类稿件并不代表本网观点,本网不承担此类稿件侵权行为的直接责任及连带责任。
3. 如因作品内容、版权等需要同本网联系的,请在作品在本网发表之日起30日内联系,否则视为放弃相关权利。