国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何利用C++ Builder 5.0 Enterprise 創建用戶自己的網上聊天程序

2019-09-10 09:07:03
字體:
來源:轉載
供稿:網友
如何利用C++ Builder 5.0 Enterprise 創建用戶自己的網上聊天程序
網絡是一個激動人心的領域,編寫網絡上的應用程序更是很多程序員向往的情節,然而編寫網絡程序需要掌握大量的網絡傳輸協議、編程接口和WinSock32 API 函數,正因為如此,要完成從Windows程序員到Web程序員的轉變不是一件易事.最近筆者成功的用C++ Buil--der 5.0 Enterprise 版編寫出了網上聊天程序,特介紹如下:

  一、 原理:網絡聊天工具需要通過TCP/IP協議,因此可以把網絡聊天程序分為服務器端和客戶器端兩部分,其中 服務器端用以把程序轉換成一個虛擬的 TCP/IP 服務器. 并且和指定的客戶機建立連接,在連接成功后,向指定的客戶器發送和接收數據;客戶器端把程序轉換成一個虛擬的TCP/IP 客戶器,并且向指定的服務器發出連接信號,在連接成功后,向指定的服務器發送和接收數據。在C++ Builder 5.0 環境下服務器端和客戶器端的功能分別由TServerSocket控件和TClientSocket 控件加以實現。其中TCP/IP協議以包含在控件的屬性中,因此只要正確填入屬性,便可實現網上通訊。

  二、具體實現:首先`在C++ builder 5.0 環境下建立一個Application ,并保存為Project1。在Form1 上添加如下控件,并設置相關屬性,其中Memo2于顯示對方傳來的信息,其中Memo1用于顯示傳給對方的信息:

控件名稱         屬性         值

TBevel         Caption       Bevel1

TSpeedButton     Caption       SpeedButton1

TMemo         Caption       Memo1

TMemo         Caption       Memo2

TMainMenu       Caption       MainMenu1

TServerSocket     Caption       ServerSocket1

TClientSocket     Caption      ClientSocket1

  同時在 MainMenu1控件中增加 三個菜單項,其屬性為

Name                 Caption  

Connect               連接

Disconncet              斷開

Listin                監聽

  在Unit1 的Private中添加:

    bool   IsServer;

    String  Server;

  在Connect 的Click句柄添加如下代碼:

void __fastcall TForm1::ConnectClick(TObject *Sender)

{

if (ClientSocket1->Active){ ClientSocke1t->Active = false;} // 判斷是否以連接,如連接則斷開連接//

if (InputQuery("Computer to connect to", "添入要連接的機器的IP地址:", Server))

{

   if (Server1.Length() > 0)//判斷用戶是否已經添入//

   {

    ClientSocket-1>Host = Server;//設置要連接的IP地址為用戶指定的IP地址值//

    ClientSocket1->Active = true;//進行連接//

   }

}

}

  在Listen的Click句柄添加如下代碼:

void __fastcall Form1 ::ListenClick(TObject *Sender)

{

Listen->Checked = !Listen->Checked;

if (Listen->Checked)

   ServerSocket1->Active = true;//服務器端監聽來自客戶器斷的信號//

else

  ServerSocket1->Active = false;



}

  在Disconnect 的Click句柄添加如下代碼:

void __fastcall TForm1::ExitClick(TObject *Sender)

{

ServerSocket1->Close();//關閉服務器端//

ClientSocket1->Close();//關閉客戶器端//

Close();

}

  在Memo1 的KeyDown句柄添加如下代碼:

void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key,

   TShiftState Shift)

{

if (Key == VK_RETURN)

{

   if (IsServer)

     {ServerSocket->Socket->Connections[0]->SendText(

     Memo1->Lines->Strings[Memo1->Lines->Count - 1]); }//作為服務器一端發送數據//

   else

   { ClientSocket->Socket->SendText(Memo1->Lines->Strings[

    Memo1->Lines->Count -1]);}//作為客戶器一端發送數據//

}

}

  在ClientSocket1的Connect句柄添加如下代碼:

void __fastcall TForm1::ClientSocket1Connect(TObject *Sender , TCustomWinSocke

t *Socket)

{//當用戶和遠程服務器連接成功后,激發該事件//

StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;

}

  在ClientSocket1的Error句柄添加如下代碼:

void __fastcall TForm1::ClientSocket1Error(TObject *Sender,

   TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)

{ //當用戶和遠程服務器連接失敗后,激發該事件//

Memo2->Lines->Add("Error connecting to:" + Server);

ErrorCode = 0;

}

  在ClientSocket1的Read句柄添加如下代碼:

void __fastcall TChatForm::ClientSocket1SeverRead(TObject *Sender, TCustomWinSo

cket *Socket)

{

//當作為客戶器一端讀來自服務器一端的數據時,激發該事件//

Memo2->Lines->Add(Socket->ReceiveText());

}

  在SeverSocket1的ClientRead句柄添加如下代碼

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocke

t *Socket)

{

//當作為客戶器一端讀來自服務器一端的數據時,激發該事件//

Memo2->Lines->Add(Socket->ReceiveText());

}

在SeverSocket1的Accept句柄添加如下代碼

void __fastcall TForm1::ServerSocket1Accept(TObject *Sender, TCustomWinSocket

*Socket)

{ //當服務器成功的監聽到來自客戶器的信號后,激發該事件//

IsServer = true;

StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteAddress;



}

  在Form1的Create句柄添加如下代碼:

void __fastcall TForm1::Form1Create(TObject *Sender)

{

  IsServer=false;

}

注:“//”為注釋.

  以上程序C++ Builder 5.0Enterprise通過。

  摘自《賽迪網》 孫航東/文
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 连城县| 宜丰县| 阳朔县| 塘沽区| 凌云县| 南陵县| 勃利县| 贵南县| 遂平县| 南皮县| 徐州市| 扶沟县| 兴业县| 渑池县| 荥阳市| 胶州市| 宿松县| 安塞县| 德阳市| 濉溪县| 石泉县| 临沂市| 和平区| 禄劝| 阳新县| 罗甸县| 那坡县| 马尔康县| 虹口区| 南郑县| 奇台县| 和硕县| 迭部县| 西乌| 沐川县| 鲁山县| 望江县| 广安市| 台山市| 沾益县| 汝阳县|