亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mainunit.pas

?? 以前寫的一個利用P2P 技術(shù)的一個通訊的例子。里面用到了 DBISAM 、INDY 控件。
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit MainUnit;
{
   P2P方式模擬QQ即時消息通訊
   thanksharp@163.com
應(yīng)考慮問題:
    1.加入TIMER.定時向好友發(fā)送握手包,以維護網(wǎng)關(guān)NAT的會話SESSION.
}

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, ExtCtrls, ComCtrls, IdBaseComponent, IdComponent,
   IdUDPBase, IdUDPServer, IdSocketHandle, testQQCommon, WinSkinData, AboutUnit;

type
   TClient = class(TForm)
      Label1: TLabel;
      UserNameEdit: TEdit;
      Label2: TLabel;
      ServerIPEdit: TEdit;
      Label3: TLabel;
      ServerPortEdit: TEdit;
      Panel1: TPanel;
      LogonButton: TButton;
      LogoutButton: TButton;
      Panel2: TPanel;
      SendMsgEdit: TRichEdit;
      UserList: TListView;
      SendMsgButton: TButton;
      StatusBar1: TStatusBar;
      UDPClient: TIdUDPServer;
      RecvEdit: TRichEdit;
      CheckBox1: TCheckBox;
      P2PTestButton: TButton;
      Label4: TLabel;
      Button1: TButton;
      Button2: TButton;
      procedure FormCreate(Sender: TObject);
      procedure LogonButtonClick(Sender: TObject);
      procedure LogoutButtonClick(Sender: TObject);
      procedure UDPClientUDPRead(Sender: TObject; AData: TStream;
         ABinding: TIdSocketHandle);
      procedure SendMsgButtonClick(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure P2PTestButtonClick(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
   private
      { Private declarations }
   public
      { Public declarations }
      MyAccount, ServerIP, MyPublicIP: string;
      MyRunPORT, ServerPORT, MyPublicPORT: Integer;
      function StartUp(): Boolean;
      function CallLogout(): Boolean;
      function SendHandData(toIP: string; toPORT: Integer): Boolean;

      function ProcRecvLogonData(ThisBinding: TIdSocketHandle; LogonData: TLogonData): boolean;
      function ProcRecvLogoutData(ThisBinding: TIdSocketHandle; LogoutData: TLogoutData): boolean;
      function ProcRecvFriendData(ThisBinding: TIdSocketHandle; UserData: TUserData): Boolean;
      function ProcRecvP2PData(ThisBinding: TIdSocketHandle; HandData: THandData): boolean;
      function ProcRecvChatMsgData(ThisBinding: TIdSocketHandle; ChatData: TChatData): boolean;
   end;

var
   Client: TClient;
   AboutBox: TAboutBox;

implementation
{$R *.dfm}

function TClient.StartUp(): Boolean;
var
   Listened: Boolean;
   ClientPort, MaxPort: Integer;
   ASocketHandle: TIdSockethandle;
begin
   Listened := false;
   ClientPort := CLIENT_PORT;
   MaxPort := ClientPort + 10;
   Listened := true;

   repeat //處理多個程序同時運行的偵聽端口問題
      try
         UDPClient.DefaultPort := ClientPort;
         UDPClient.Active := true;
         Listened := true;
         break;
      except
         on EIdCouldNotBindSocket do
            begin
               UDPClient.Active := false;
               UDPClient.Bindings.Clear;
               ClientPort := ClientPort + 1;
               if ClientPort > MaxPort then
                  begin
                     Listened := false;
                     break;
                  end;
            end;
      end;
   until not Listened;

   if Listened then
      begin
         MyRunPORT := UDPclient.DefaultPort;
         StatusBar1.Panels.Items[1].Text := '運行端口:[' + IntToStr(MyRunPORT) + ']';
         Result := true;
      end
   else
      begin
         StatusBar1.Panels.Items[1].Text := '偵聽失敗!';
         Result := false;
      end;
end;


procedure TClient.FormCreate(Sender: TObject);
begin
   StartUp();
end;

//登錄上線

procedure TClient.LogonButtonClick(Sender: TObject);
var
   LogonDataPackage: TLogonDataPackage;
   _ServerIP, _Account: string;
   _ServerPORT: Integer;
begin
   _ServerIP := ServerIPEdit.Text;
   _ServerPORT := StrToInt(ServerPORTEdit.text);
   _Account := UserNameEdit.Text;
   with LogonDataPackage do
      begin
         Head.MsgType := IntToStr(LogonSign);
         StrPCopy(Body.Account, _Account);
         StrPCopy(Body.MyPublicIP, '');
         StrPCopy(Body.MyPublicPORT, '');
         StrPCopy(Body.lResult, '');
         //
      end;
   UdpClient.SendBuffer(_ServerIP, _ServerPORT, LogonDataPackage, SizeOf(LogonDataPackage));
end;

//注銷下線

procedure TClient.LogoutButtonClick(Sender: TObject);
begin
   CallLogout();
end;
//向服務(wù)器注銷

function TClient.CallLogout(): Boolean;
var
   LogoutDataPackage: TLogoutDataPackage;
   i, _ToPORT: integer;
   _toIP: string;
begin
   with LogoutDataPackage do
      begin
         Head.MsgType := IntToStr(LogoutSign);
         StrPCopy(Body.Account, MyAccount);
         StrPCopy(Body.lResult, '');
      end;
   UdpClient.SendBuffer(ServerIP, ServerPort, LogoutDataPackage, SizeOf(LogoutDataPackage));
   //向好友發(fā)送下線信號
   for i := 0 to UserList.Items.Count - 1 do
      begin
         _ToIP := UserList.Items.Item[i].SubItems[0];
         _ToPORT := StrToInt(UserList.Items.Item[i].SubItems[1]);
         with LogoutDataPackage do
            begin
               Head.MsgType := IntToStr(LogoutSign);
               StrPCopy(Body.Account, MyAccount);
               StrPCopy(Body.lResult, '');
               //
            end;
         UdpClient.SendBuffer(_toIP, _toPORT, LogoutDataPackage, SizeOf(LogoutDataPackage));
         Sleep(1);
      end;

end;
//UdpClient 讀取數(shù)據(jù)

procedure TClient.UDPClientUDPRead(Sender: TObject; AData: TStream;
   ABinding: TIdSocketHandle);
var
   _UDPHead: TTQQUDPHead;
   _LogonData: TLogonData;
   _LogoutData: TLogoutData;
   _UserData: TUserData;
   _HandData: THandData;
   _ChatData: TChatData;
   RecvSize, MsgType: integer;
begin
   try
      MsgType := -1;
      RecvSize := adata.Read(_UDPHead, sizeof(_UDPHead)); //接收數(shù)據(jù)頭
      MsgType := StrToInt(_UDPHead.MsgType);
      if Msgtype = -1 then exit;
      //UDPSERVER.Binding.Assign(ABinding); //2005-02-17 Updated!
      case MsgType of
         LogonSign:
            begin
               //登錄 <--Server ReBack
               Adata.Read(_LogonData, sizeof(TLogonData));
               ProcRecvLogonData(Abinding, _LogonData);
            end;
         LogoutSign:
            begin
               //注銷 <--Server or Friend
               Adata.Read(_LogoutData, sizeof(TLogoutData));
               ProcRecvLogoutData(Abinding, _LogoutData);
            end;
         FriendDataSign:
            begin
               //收到好友列表信息
               Adata.Read(_UserData, sizeof(TUserData));
               ProcRecvFriendData(Abinding, _UserData);
            end;
         HandSign:
            begin
               //處理P2P請求
               Adata.Read(_HandData, sizeof(THandData));
               ProcRecvP2PData(Abinding, _HandData);
            end;
         ChatMsgSign:
            begin
               //處理聊天消息
               Adata.Read(_ChatData, sizeof(TChatData));
               ProcRecvChatMsgData(Abinding, _ChatData);
            end;

      end;
   except on E: Exception do
         //Memo1.lines.add(E.Message);
   end;
end;
//收到登錄服務(wù)器的反饋信息處理

function TClient.ProcRecvLogonData(ThisBinding: TIdSocketHandle; LogonData: TLogonData): boolean;
var
   _LogonDataPackage: TLogonDataPackage;
   _HandDataPackage: THandDataPackage;
   _tempUserBasicInfo: TServerUserBasicInfo;
   _Account, _PeerIP, _tempIP, _NeedReBack, _isLogin: string;
   i, _PeerPORT, _tempPORT: integer;
begin
   _Account := LogonData.Account;
   _PeerIP := thisbinding.PeerIP;
   _PeerPORT := thisbinding.PeerPort;
   _IsLogin := LogonData.lResult;
   //登錄成功

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产老妇另类xxxxx| 日韩av一级片| 亚洲一区在线看| 精品在线视频一区| 色综合久久九月婷婷色综合| 日韩视频在线观看一区二区| 亚洲午夜久久久久久久久电影院| 国内精品嫩模私拍在线| 一本色道久久加勒比精品| 久久众筹精品私拍模特| 亚洲成人免费在线| 91丨九色丨国产丨porny| 久久色视频免费观看| 日韩电影在线观看电影| 一本久久a久久精品亚洲| 亚洲精品一区二区三区精华液| 亚洲一区二区三区四区五区黄| 国产福利不卡视频| 欧美tk丨vk视频| 日韩国产欧美视频| 欧美日韩日日摸| 怡红院av一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 久久综合色鬼综合色| 麻豆精品一区二区av白丝在线| 欧美色中文字幕| 玉足女爽爽91| 在线免费视频一区二区| 亚洲四区在线观看| 成人精品一区二区三区中文字幕 | 香蕉乱码成人久久天堂爱免费| 成人禁用看黄a在线| 国产亚洲婷婷免费| 国产美女av一区二区三区| 欧美一区二区视频在线观看 | 国产欧美精品一区二区色综合朱莉| 青娱乐精品视频| 日韩一区二区三| 日韩激情视频在线观看| 欧美一区永久视频免费观看| 亚洲va韩国va欧美va| 制服丝袜亚洲色图| 男女男精品视频| 337p粉嫩大胆色噜噜噜噜亚洲| 国产在线麻豆精品观看| 国产欧美日韩不卡免费| 日韩欧美激情一区| 久久精品国产亚洲a| 久久免费午夜影院| 处破女av一区二区| 一区二区三区日韩| 欧美精品高清视频| 韩国视频一区二区| 国产三级欧美三级日产三级99| 国产高清不卡一区二区| 国产精品动漫网站| 欧美日韩免费观看一区三区| 蜜桃视频免费观看一区| 国产亚洲综合性久久久影院| av成人免费在线观看| 亚洲在线观看免费视频| 欧美一区二区视频在线观看 | 欧美高清精品3d| 狠狠色综合色综合网络| 综合久久久久久| 欧美理论片在线| 国产999精品久久| 亚洲欧美电影一区二区| 日韩一级黄色片| 成人精品视频一区二区三区 | aaa亚洲精品一二三区| 一区二区三区波多野结衣在线观看| 欧美日韩二区三区| 国产ts人妖一区二区| 亚洲国产成人va在线观看天堂| 日韩精品在线一区| 色综合视频一区二区三区高清| 视频在线观看一区二区三区| 香蕉久久夜色精品国产使用方法| 久久看人人爽人人| 精品视频一区 二区 三区| 国产精品中文有码| 亚洲国产另类精品专区| 久久精品网站免费观看| 欧美少妇xxx| 成人精品一区二区三区中文字幕| 免费在线成人网| 亚洲精品一二三| 国产丝袜在线精品| 欧美一级午夜免费电影| 色久综合一二码| 国产91对白在线观看九色| 免费亚洲电影在线| 亚洲图片欧美一区| 亚洲视频在线一区观看| 久久久噜噜噜久久中文字幕色伊伊| 欧美婷婷六月丁香综合色| 成人h精品动漫一区二区三区| 蓝色福利精品导航| 日韩精品一二三| 洋洋成人永久网站入口| 亚洲欧美在线高清| 国产清纯美女被跳蛋高潮一区二区久久w | 久久中文娱乐网| 日韩午夜小视频| 欧美日韩国产综合久久| 欧美在线不卡一区| 91美女福利视频| 91色九色蝌蚪| 91免费视频网| www.欧美亚洲| www.亚洲色图| 成人短视频下载| www.欧美日韩| 99久久婷婷国产综合精品| 成人免费视频免费观看| 国产在线视视频有精品| 国产精品综合在线视频| 激情成人午夜视频| 国产一区二区三区观看| 国产精品一区二区男女羞羞无遮挡| 麻豆精品久久精品色综合| 理论电影国产精品| 久久99国产精品尤物| 精品系列免费在线观看| 国产一区二区三区免费| 国产尤物一区二区在线| 国产精品99久久久久久有的能看| 国产一区二区三区免费| 成人精品一区二区三区四区 | 精品一区二区三区香蕉蜜桃| 老司机一区二区| 国产精品77777| 成人av影视在线观看| 色女孩综合影院| 欧美日韩免费高清一区色橹橹| 777奇米四色成人影色区| 亚洲欧美偷拍另类a∨色屁股| 亚洲日本中文字幕区| 亚洲一二三级电影| 蜜臀久久久99精品久久久久久| 精品在线免费观看| 成人美女视频在线观看| 精品视频1区2区| 精品国产1区二区| 亚洲欧洲日产国码二区| 亚洲第一综合色| 国产麻豆精品久久一二三| 99re这里只有精品视频首页| 欧美欧美欧美欧美首页| 久久久五月婷婷| 亚洲午夜日本在线观看| 久久99久久久欧美国产| 99re这里都是精品| 欧美一级日韩一级| 一色屋精品亚洲香蕉网站| 五月婷婷激情综合网| 国产一区美女在线| 色婷婷精品大视频在线蜜桃视频| 欧美一区二区成人6969| 国产精品美女久久久久aⅴ国产馆| 亚洲国产精品影院| 国产黄人亚洲片| 欧美日韩高清一区二区| 国产精品午夜春色av| 日本网站在线观看一区二区三区| 成人免费毛片aaaaa**| 欧美精选一区二区| 综合久久久久综合| 激情综合色播五月| 欧美日韩国产另类不卡| 国产精品久久久久永久免费观看 | 日韩免费观看2025年上映的电影| 亚洲欧洲av色图| 韩国女主播成人在线| 欧美色精品在线视频| 国产精品久久久久影院亚瑟 | 国产精品家庭影院| 精品亚洲欧美一区| 欧美丰满美乳xxx高潮www| 亚洲免费观看高清完整版在线观看 | 国产乱淫av一区二区三区| 911精品国产一区二区在线| 亚洲欧美偷拍卡通变态| 成人综合在线观看| 精品久久一二三区| 男人的天堂久久精品| 精品视频一区二区不卡| 亚洲一区二区偷拍精品| 99精品久久只有精品| 日本一区二区三区高清不卡| 另类小说综合欧美亚洲| 欧美伦理视频网站| 午夜精品免费在线| 欧美日韩在线播放三区四区| 亚洲另类一区二区| 色婷婷久久一区二区三区麻豆| 亚洲人妖av一区二区| a级高清视频欧美日韩| 国产精品久久久久久妇女6080 |