簡單聊天程式分析

2021-04-13 07:55:24 字數 2646 閱讀 5549

傳送端與接收端一塊實現.

1.在stdafx.h中包含標頭檔案afxsock.h,不用連線庫檔案library: use ws2_32.lib.

3.在cchatdlg中增加乙個成員函式

bool cchatdlg::initsocket()

sockaddr_in addrsock;

addrsock.sin_family=af_inet;

addrsock.sin_port=htons(6000);

addrsock.sin_addr.s_un.s_addr=htonl(inaddr_any);

int retval;

retval=bind(m_socket,(sockaddr*)&addrsock,sizeof(sockaddr));

if(socket_error==retval)

return true;

}4.在bool cchatdlg::oninitdialog()中呼叫initsocket()進行初使化.

5.在接收資料時,recvfrom()是乙個阻塞操作.所以要生成乙個執行緒來完成這個操作,並且想給執行緒傳進兩個引數,乙個是建立的socket,乙個是對話方塊的控制代碼或是接收編輯框的控制代碼,這樣就可以使接收到的資料傳回給對話方塊或編輯框再進行處理.但先看看createthread()這個函式只提供給傳遞乙個引數,但這個函式的第四個引數是乙個指標,可以是乙個變數的指標,也可是乙個物件的指標.這樣就可以給它傳遞乙個結構體的指標.在這個結構體中包含了兩個想傳進的引數.

handle createthread(

lpsecurity_attributes lpthreadattributes, // sd

size_t dwstacksize,                       // initial stack size

lpthread_start_routine lpstartaddress,    // thread function

lpvoid lpparameter,                       // thread argument

dword dwcreationflags,                    // creation option

lpdword lpthreadid                        // thread identifier

);所以在chatdlg.h中定義乙個結構體// chatdlg.h : header file

struct recvparam

;在bool cchatdlg::oninitdialog()中進行初使化.(就是initsocket()下面)

recvparam *precvparam=new recvparam;

precvparam->sock=m_socket;

precvparam->hwnd=m_hwnd;

handle hthread=createthread(null,0,recvproc,(lpvoid)precvparam,0,null);

closehandle(hthread);

6.對執行緒操作函式進行編寫.

先在cchatdlg中增加乙個成員函式

public:

static dword winapi recvproc(lpvoid lpparameter);//這個寫可以體現面向對像,寫可以寫成全域性函式.

再進行實現

dword winapi cchatdlg::recvproc(lpvoid lpparameter)

return 0;

}7.在 chatdlg.h : header file 中定義訊息的值.就寫在struct recvparam上面

// cchatdlg dialog

#define wm_recvdata  wm_user+1

再在 chatdlg.h : header file作乙個[訊息響應函式原型]的宣告.

protected:

hicon m_hicon;

// generated message map functions

//}afx_msg

afx_msg void onrecvdata(wparam wparam,lparam lparam);//這裡作宣告.注意:因為在傳送訊息的時候傳遞了乙個引數.所以在宣告訊息響應函式時就要寫上(wparam wparam,lparam lparam)

declare_message_map()

8.在chatdlg.cpp進行訊息對映.

begin_message_map(cchatdlg, cdialog)

//}afx_msg_map

on_message(wm_recvdata,onrecvdata)//這裡作的對映.先前只是宣告函式原型 .

end_message_map()

9.進行訊息響應函式的實現

void cchatdlg::onrecvdata(wparam wparam,lparam lparam)

/*******************以上是接收端,下面是傳送端.**********/

void cchatdlg::onbtnsend()

基於UDP簡單聊天程式

server.c include include include include include include include include include include define server port 8888 define max msg size 1024 void udps re...

Delphi簡單TCP聊天程式

首先上截圖 最近有點無聊,於是將以前寫到一半的聊天程式拿出來改進了一下。delphi自帶兩個控制項 tidtcpserver,tidtcpclient。顧名思義,乙個是伺服器端用的,另乙個是客戶端用的。程式主要思路如下,客戶端程式開始執行時與伺服器端建立連線,使用者登入時向伺服器端傳送login命令...

websocket實現簡單聊天程式

先載入所需要的通訊模組 建立使用者列表和訊息列表 var person var history 繫結並監聽80埠 客戶端連線成功後,觸發響應事件connection,完成要繫結的事件並實現客戶端出發的事件 io.sockets.on connection function socket obj.co...