狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美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久久久亚洲精品| 精品国产髙清在线看国产毛片| 国产在线看一区| ●精品国产综合乱码久久久久| 欧美四级电影网| 99国产精品久久久久久久| 国产成a人亚洲| 亚洲国产精品一区二区久久| 精品剧情v国产在线观看在线| 性娇小13――14欧美| 欧美日韩国产三区| 国产成人免费av在线| 日韩主播视频在线| 一区在线观看视频| 精品国产91亚洲一区二区三区婷婷| 久久国产精品免费一区| 91久久黄色| 国产一区自拍视频| 成人av电影在线播放| 国模娜娜一区二区三区| 日产精品久久久久久久性色| 一区二区三区不卡视频| 亚洲欧洲韩国日本视频| 国产精品青草久久| 国产精品狼人久久影院观看方式| 国产日韩欧美不卡| 国产日本亚洲高清| 国产亚洲成年网址在线观看| 久久久亚洲精华液精华液精华液| 精品国产一区a| 久久午夜色播影院免费高清 | 美腿丝袜亚洲综合| 青青草国产精品亚洲专区无| 另类小说图片综合网| 国内精品在线播放| 国产不卡视频在线播放| av资源站一区| 在线观看一区视频| 巨乳诱惑日韩免费av| 久久一综合视频| 欧美亚洲综合久久| 日韩欧美成人一区| 国产精品婷婷午夜在线观看| 一区二区三区免费看视频| 亚洲成av人片在www色猫咪| 精品一区二区免费| 国产成人免费视频网站高清观看视频| 日韩视频不卡| 在线观看日韩一区| 久久久久久久久久久久久女国产乱 | 国产日韩欧美高清免费| 在线观看国产精品网站| 欧美大黄免费观看| 亚洲美女视频在线| 国产aⅴ综合色| 91久久久一线二线三线品牌| 在线观看网站黄不卡| 国产偷国产偷精品高清尤物| 亚洲一区二区三区美女| 国产不卡在线播放| 国产欧美激情| 国产精品996| 国产精品呻吟| 久久综合久久久久88| 日韩在线a电影| 欧美久久久久久久| 欧美精品乱码久久久久久| 亚洲少妇30p| 日韩精品一区在线观看| 爽好多水快深点欧美视频| 欧美精品福利| 精品欧美久久久| 麻豆成人久久精品二区三区红| 伊人久久大香线蕉综合热线 | 国产成人久久精品77777最新版本| 一区二区三区av| 亚洲欧洲美洲综合色网| 99久久国产免费看| 3d成人动漫网站| 免费人成精品欧美精品| 久久久久久亚洲精品杨幂换脸 | 国产成人aaa| 欧美色男人天堂| 男女男精品视频| 久久综合九色| 老司机精品视频一区二区三区| 亚欧成人精品| 视频一区二区不卡| 亚洲免费网站| 麻豆精品精品国产自在97香蕉| 欧美中文日韩| 日本欧美在线观看| 欧洲色大大久久| 国产成人自拍网| 2024国产精品| 精久久久久久| 一区二区三区中文在线观看| 亚洲精品影院| 午夜亚洲一区| 久草这里只有精品视频| 日韩女优av电影| 欧美特黄a级高清免费大片a级| 国产人成亚洲第一网站在线播放 | 69av一区二区三区| aaa国产一区| 国产精品国产自产拍高清av王其| 在线免费日韩片| 蜜臀av一区二区在线免费观看| 69成人精品免费视频| 97se亚洲国产综合在线| 亚洲图片你懂的| 欧美日韩在线播放| 99vv1com这只有精品| 亚洲黄色小说网站| 玖玖精品视频| 午夜欧美精品久久久久久久| 亚洲国产精品自拍| 欧美变态tickle挠乳网站| 亚洲人成人一区二区三区| 国精产品一区一区三区mba桃花| 欧美激情在线一区二区| 欧美一级久久| 99国产精品久久久久| 五月婷婷久久丁香| 久久久www免费人成精品| 久久不射2019中文字幕| 不卡高清视频专区| 丝袜诱惑制服诱惑色一区在线观看| 日韩精品在线网站| 日本久久电影网| 狠色狠色综合久久| 欧美日韩在线不卡| 国产三区精品| 欧美日韩四区| 本田岬高潮一区二区三区| 日韩国产成人精品| 亚洲男人天堂一区| 精品国产露脸精彩对白| 欧美日韩国产一区二区三区地区| 亚洲精品字幕| 亚洲精品123区| 色综合网站在线| 成人黄色小视频在线观看| 久久超碰97中文字幕| 亚洲综合色成人| 依依成人综合视频| 国产精品久久久久久福利一牛影视 | 在线综合视频播放| 欧美伦理电影网| 欧美二区在线观看| 欧美卡1卡2卡| 6080午夜不卡| 精品少妇一区二区三区视频免付费| 欧美日韩成人高清| 欧美老肥妇做.爰bbww视频| 欧美四级电影网| 欧美三级资源在线| 欧美亚洲图片小说| 亚洲视频资源在线| 日本一区二区三区四区在线视频| 国产亚洲综合av| 久久综合一区二区| 中文字幕日韩欧美一区二区三区| 亚洲视频免费在线观看| 亚洲一二三四久久| 六月丁香综合在线视频| 国产精品白丝jk白祙喷水网站| 风间由美一区二区三区在线观看| 成人一区二区视频| 欧美在线播放一区| 日韩视频一区| 欧美在线免费观看视频| 欧美日本高清视频在线观看| www国产成人| 一区二区三区欧美亚洲| 韩国在线一区二区| 欧美成人日韩| 色8久久精品久久久久久蜜| 日韩一区二区三区免费观看 | 在线观看av不卡| 337p日本欧洲亚洲大胆精品 | 欧美日韩中文字幕一区| 国产亚洲一区二区三区| 亚洲二区视频在线| 99这里都是精品| 欧美主播一区二区三区美女 久久精品人| 可以看av的网站久久看| 久久综合色鬼综合色| 日韩精品免费专区| 欧美黄色一级视频| 在线观看网站黄不卡| 亚洲精品国产a| 国产黄色精品视频| 久久午夜精品一区二区| 国产欧美综合在线| 韩日欧美一区二区三区| 亚洲永久在线| 国产精品久久久一本精品| 丁香网亚洲国际| 欧美中文字幕久久|