狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

用C++ Builder創建基于Internet的點對點Chat

用C++ Builder創建基于Internet的點對點Chat

更新時間:2024-04-12 文章作者:未知 信息來源:網絡 閱讀次數:

北京市白石橋路  周新棟

---- 創建基于Internet的應用程序,你也許會想到復雜的WinSock編程。不過,C++ Builder3提供了新的WebBroker的Internet套件,其中的TClientSocket和TServerSocket組件封裝了Windows的有關API,大大簡化了WinSock編程。要通過Internet傳輸數據,至少需要一對Socket,一個Socket在客戶端,另一個Socket在服務器端。其實TClientSocket、TServerSocket組件并不是Socket對象,其屬性Socket將返回各自的Socket對象。TClientSocket用來處理客戶端到服務器端之間的socket連接,TServerSocket用來處理由客戶端發來的socket連接,一旦客戶端和服務器端都接通了socket,客戶端和服務器端就可以相互通信了。

---- 建立一新項目,創建應用程序的用戶界面:

---- 1.將組件頁切換到Internet頁,放一個TServerSocket組件和一個TClientSocket組件到窗體上,這樣應用程序既可以是TCP/IP服務器,也可以是TCP/IP客戶。將Port屬性都設為同一個值(如1000),確定Socket之間的連接類型為NonBlocking(非阻塞方式)。

---- 2.放兩個TMemo組件到窗體上,用來分別顯示雙方的談話內容,將Memo2的ReadOnly屬性設為True。

---- 3.在窗體的頂部放上一個Panel組件,在其上放三個按鈕:監聽(btnlisten)、連接(btnconnect)、斷開(btndisconnect),用來啟動相應的操作。

---- 4.在窗體底部放一個StatusBar組件,將其SimplePanel屬性設為True,在相應的事件處理程序中改變狀態條信息,讓用戶隨時了解連接狀態。

---- 打開頭文件,在窗體類的Private段添加兩個私有成員: bool IsServer;String Server。雙方通信時需同時運行Chat程序,IsServer用來確定哪個Chat程序處于服務器端,Server用來存放服務器的主機名。建立窗體類的構造器如下:

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    IsServer=false;
    Server="localhost";
}


---- 這里Server被缺省設為localhost,這樣程序可以在沒有連入Internet的單機上進行調試。在Windows子目錄下你可以找到hosts.sam文件中,在該文件中已經將本機IP地址127.0.0.1定義了主機名:localhost。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    btndisconnect- >Enabled=false;
}

---- 程序運行后,如果用戶按下"監聽"鈕,則將該程序設為服務器端,這時應將TServerSocket的Active屬性設為True,使服務器自動進入監聽狀態。
void __fastcall TForm1::btnlistenClick(TObject *Sender)
{
    ClientSocket1- >Active=false;
    ServerSocket1- >Active=true;
    StatusBar1- >SimpleText="正在監聽...";
    btnlisten- >Enabled=false;
    btnconnect- >Enabled=false;
}

---- 當用戶按下"連接"鈕后,程序會彈出一個詢問框,要求用戶輸入要連接的服務器的主機名,然后建立連接。
void __fastcall TForm1::btnconnectClick(TObject *Sender)
{
    if(InputQuery("連接到服務器","輸入服務器地址:",Server)){
        if(Server.Length() >0){
            ClientSocket1- >Host=Server;
            ClientSocket1- >Active=true;
            btnlisten- >Enabled=false;
            btnconnect- >Enabled=false;
            btndisconnect- >Enabled=true;
        }
    }
}


---- 當用戶提出連接請求后,客戶端會觸發OnCreate事件,程序先在狀態條中顯示連接信息,然后將顯示對方談話內容的Memo2清空,準備開始交談。
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    StatusBar1- >SimpleText="連接到:"+Server;
    Memo2- >Lines- >Clear();
}


---- 在服務器接受了客戶的請求后會觸發OnAccept事件,在這個事件處理程序中將標志服務器端的變量IsServer設為True,并準備開始交談。
void __fastcall TForm1::ServerSocket1Accept(
TObject *Sender,
      TCustomWinSocket *Socket)
{
    Memo2- >Lines- >Clear();
    IsServer=true;
    StatusBar1- >SimpleText="連接到:"
+Socket- >RemoteAddress;
}


---- 在建立連接后,雙方就可以在Memo1中輸入談話內容開始進行交談了,按下Enter鍵后,將所在行的文本發送出去。服務器端的Socket的Connections屬性返回一個數組,該數組由服務器當前活動的連接組成。
void __fastcall TForm1::Memo1KeyDown(
TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if(Key==VK_RETURN){
        if(IsServer)
            ServerSocket1- >Socket- >Connections[0]- >SendText(
Memo1- >Lines- >Strings[Memo1- >Lines- >Count-1]);
        else
            ClientSocket1- >Socket- >SendText(
Memo1- >Lines- >Strings[Memo1- >Lines- >Count-1]);
    }
}


---- 在本例中我們采用非阻塞傳輸方式,當其中的一方進行寫操作時,另一方會觸發OnRead事件(客戶端)或OnClientRead事件(服務器端),這兩個事件的處理程序只是將接收到的內容添加到Memo2的后面。
    Memo2- >Lines- >Add(Socket- >ReceiveText());

---- 如果在用戶建立連接后單擊"斷開"鈕,將斷開客戶端與服務器的連接,服務器端將觸發OnClientDisconnect事件,而客戶端則會觸發OnDisconnect事件,這時服務器端應回到監聽狀態,等待用戶的連接;而客戶端將返回到連接前的狀態,等待用戶再次建立連接,如果有不止一個服務器的話,可以選擇連接到其他的服務器上。
void __fastcall TForm1::btndisconnectClick(
TObject *Sender)
{
    ClientSocket1- >Close();
}
void __fastcall TForm1::ServerSocket1ClientDisconnect(
TObject *Sender,
      TCustomWinSocket *Socket)
{
    StatusBar1- >SimpleText="正在監聽...";
}
void __fastcall TForm1::ClientSocket1Disconnect(
TObject *Sender, TCustomWinSocket *Socket)
{
    btnlisten- >Enabled=true;
    btnconnect- >Enabled=true;
    btndisconnect- >Enabled=false;
    StatusBar1- >SimpleText="";
}


---- 此外在客戶端還應該增加錯誤捕獲機制,當用戶輸入無效的服務器名或服務器端沒有處于監聽狀態時能夠及時給用戶反饋信息。
void __fastcall TForm1::ClientSocke
t1Error(TObject *Sender,
      TCustomWinSocket *Socket,
TErrorEvent ErrorEvent, int &ErrorCode)
{
StatusBar1- >SimpleText="無法連接到:
"+Socket- >RemoteHost;
    ErrorCode=0;
}

---- 以上代碼在C++ Builder3 C/S版中編譯、運行通過。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
久久综合av免费| 日韩精品一区二区三区在线播放 | 国产一区91| 色婷婷精品大在线视频| 亚洲在线观看| 欧洲精品一区二区| 欧美激情中文不卡| 午夜久久久影院| 56国语精品自产拍在线观看| 日韩一级片网站| 视频在线观看国产精品| 欧美综合亚洲图片综合区| 亚洲成人原创| 91精品视频网| 欧美国产日产图区| 亚洲人精品一区| 日本成人在线不卡视频| 成人性色生活片| 亚洲大胆av| 欧美精品日韩一本| 一区二区三区四区不卡视频 | 国产亚洲一区二区三区在线播放| 国产日韩精品一区观看 | 欧美国产91| 欧美喷潮久久久xxxxx| 一区免费观看视频| 成人深夜在线观看| 欧美影院一区二区三区| 色婷婷综合久久久| av电影天堂一区二区在线| 欧美精品偷拍| 欧美一区二区三区四区五区| 亚洲制服丝袜av| 欧美日韩免费高清| 日韩欧美综合在线| 黄一区二区三区| 六月婷婷一区| 亚洲一区二区高清| 精品999成人| 国产日产欧美一区二区三区| 国产传媒欧美日韩成人| 91精品福利视频| 亚洲国产成人av| 一区二区高清视频| 国产精品狼人久久影院观看方式| 午夜欧美大尺度福利影院在线看| 亚洲福利电影| 亚洲免费观看高清| 狠狠爱成人网| 最新日韩av在线| 91麻豆精品国产自产在线| 色悠久久久久综合欧美99| 欧美三级乱人伦电影| 国产亚洲欧美另类一区二区三区| 老鸭窝一区二区久久精品| 欧美色综合影院| 天天做天天摸天天爽国产一区| 久久女同性恋中文字幕| 91精品国产福利在线观看| 在线免费日韩片| 午夜电影久久久| 在线观看视频91| 天天综合色天天| 久久经典综合| 天堂资源在线中文精品| 欧美韩国一区| 日韩精品资源二区在线| 欧美一区二区三区久久精品| 精品国产乱码久久久久久久| 狠狠干成人综合网| 日韩激情视频在线观看| 久久免费电影网| 久久国产88| 精品动漫3d一区二区三区免费| 亚洲成人av电影在线| 在线播放亚洲一区| 欧美一区免费视频| 日本亚洲三级在线| 欧美精品一区二| 国精品一区二区三区| 亚洲444eee在线观看| 日韩欧美成人一区| 不卡欧美aaaaa| 麻豆精品久久久| 色欧美日韩亚洲| 丁香婷婷综合网| 免费久久精品视频| 精品电影一区二区三区| 成人h动漫精品一区二| 欧美国产日韩精品免费观看| 亚洲一区欧美激情| 国产一区免费电影| 中文字幕不卡在线播放| 欧美日本一区二区在线观看| 国产日韩欧美综合精品| 成人av影院在线| 麻豆精品视频在线观看免费| 亚洲另类在线一区| 欧美日韩国产欧美日美国产精品| 国产精品theporn| 国产欧美日韩亚洲| 影音先锋亚洲精品| 中文字幕乱码日本亚洲一区二区| 激情文学综合插| 国产色婷婷亚洲99精品小说| 亚洲国产免费看| 免费一级片91| 久久久777精品电影网影网| 亚洲免费网站| 成人成人成人在线视频| 一区二区三区中文在线| 91麻豆精品国产91久久久久久 | 亚洲图片欧洲图片日韩av| 奇米影视一区二区三区| 欧美极品aⅴ影院| 精品国精品自拍自在线| 91丝袜高跟美女视频| 午夜精品福利在线| 国产日韩欧美制服另类| 欧美午夜寂寞影院| 在线观看欧美亚洲| 大白屁股一区二区视频| 亚洲国产欧美在线| 国产丝袜在线精品| 在线免费观看成人短视频| 欧美日韩国产免费观看| 国产在线不卡一区| 亚洲黄色免费网站| 久久久久97国产精华液好用吗 | 国产综合色在线| 亚洲午夜羞羞片| 国产精品―色哟哟| 91精品国产麻豆| 色香蕉成人二区免费| 国产精品mv在线观看| 丰满放荡岳乱妇91ww| 日本在线不卡视频一二三区| 亚洲女人的天堂| 国产亚洲女人久久久久毛片| 7777女厕盗摄久久久| 久久久久久久久久久久久久一区| 欧美日韩综合精品| 99久久婷婷国产综合精品电影| 麻豆成人免费电影| 亚洲最新视频在线观看| 国产调教视频一区| 26uuu亚洲综合色| 日韩欧美一区二区免费| 欧美日韩一级视频| 色乱码一区二区三区88| 亚洲欧美日本日韩| 亚洲精品视频一区二区三区| 欧美亚韩一区| 午夜久久黄色| 99国产精品久久久久久久久久久| 激情综合网av| 蜜桃av一区二区三区电影| 婷婷丁香久久五月婷婷| 亚洲高清中文字幕| 亚洲一区二区三区视频在线播放| 亚洲欧洲一区二区在线播放| 国产精品网友自拍| 国产欧美日本一区视频| 国产视频一区在线观看| 久久午夜电影网| 国产日产欧产精品推荐色| 国产三级一区二区| 国产欧美日韩在线| 国产三级精品视频| 国产精品美女久久久久久久久久久| 国产日韩欧美综合一区| 欧美国产精品专区| 亚洲欧洲无码一区二区三区| 自拍偷拍国产亚洲| 一区二区三区不卡视频在线观看| 一区二区三区精品在线| 亚洲成人你懂的| 日本系列欧美系列| 精品一区二区三区免费观看| 国产精一区二区三区| 大陆成人av片| 午夜精品亚洲一区二区三区嫩草| 欧美日韩第一区| 亚洲精选在线| 久久久一本精品99久久精品66| 91精彩视频在线| 日韩欧美专区在线| 国产亲近乱来精品视频| 亚洲男同1069视频| 亚洲高清免费在线| 久久超碰97中文字幕| 成人免费看视频| 亚洲天堂偷拍| 久久狠狠一本精品综合网| 99伊人成综合| 男女激情视频一区| 日韩免费在线观看| 亚洲国产精选| 精品一区二区成人精品| 悠悠色在线精品|