當前位置:首頁 » 課程大全 » windows網路編程課程設計

windows網路編程課程設計

發布時間: 2021-02-10 19:20:01

㈠ 怎樣學習Windows 網路編程

新手必學:windows網路編程經典入門

作者:huyoo
對於一個windows網路編程初學者,下面方法是經典入門。
初學者建議不要用MFC提供的類,而用windows API做一個簡單伺服器和客戶端,這樣有助於對socket編程機制的理解。

為了簡單起見,應用程序是基於MFC的標准對話框。

Winsock用WINDOWS API實現:

(1)伺服器端有兩個線程:
主線程 — 你需要編寫以下函數來實現

#define NETWORK_EVENT USER_MESSAGE+100 file://定義網路事件
sockaddr_in clientaddr; file://暫時存放客戶端IP地址

file://自己定義消息映射函數,將上面定義的網路事件映射到處理函數
file://OnNetEvent為網路事件處理函數,它在下面定義
ON_MESSAGE(NETWORK_EVENT, OnNetEvent);

在你對話框中的初始化函數中調用下面的初始化網路的子函數
BOOL InitNetwork() file://初始化網路
{
file://初始化TCP協議
BOOL ret = WSAStartup(MAKEWORD(2,2), &wsaData);
if(ret != 0)
{
MessageBox("初始化套接字失敗!");
return FALSE;
}

file://創建伺服器端套接字
SOCKET serverSocket
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket == INVALID_SOCKET)
{
MessageBox("創建套接字失敗!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}

file://綁定到本地一個埠上
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(1688);
localaddr.sin_addr.s_addr = 0;
if(bind(serverSocket ,(const struct sockaddr*)&localaddr,
sizeof(sockaddr)) == SOCKET_ERROR)
{
MessageBox("綁定地址失敗!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}

file://注冊網路非同步事件,m_hWnd為應用程序的主對話框或主窗口的句柄
WSAAsyncSelect(serverSocket, m_hWnd, NETWORK_EVENT,
FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE);

listen(serverSocket, 5); file://設置偵聽模式

return TRUE;
}

file://定義網路事件的響應函數
void OnNetEvent(WPARAM wParam, LPARAM lParam)
{
file://調用API函數,得到網路事件類型
int iEvent = WSAGETSELECTEVENT(lParam);

file://得到發出此事件的客戶端套接字
SOCKET pSock = (SOCKET)wParam;
switch(iEvent)
{
case FD_ACCEPT: file://客戶端連接請求
{
OnAccept();

break;
}
case FD_CLOSE: file://客戶端斷開事件:
{
OnClose(pSock);
break;
}
case FD_READ: file://網路數據包到達事件
{
OnReceive(pSock);
break;
}
case FD_WRITE: file://發送網路數據事件
{
OnSend(pSock);
break;
}
default: break;
}
}

void OnAccept(SOCET pSock) file://響應客戶端連接請求函數
{
int len = sizeof(sockaddr);

file://調用API函數,接受連接,並返回一個新套接字
file://還可以獲得客戶端的IP地址
SOCKET clientSocket = accept(serverSocket,
(struct sockaddr*)&clientaddr, &len);

file://為新的socket注冊非同步事件,注意沒有Accept事件
if(WSAAsyncSelect(clientSocket ,m_hWnd, IP_EVENT,
FD_CLOSE | FD_READ | FD_WRITE) == SOCKET_ERROR)
{
MessageBox("注冊非同步事件失敗!");
return;
}

file://自編函數,將此客戶端的相關信息保存下來:套接字、
// IP地址、登陸時間
saveClientSocket(clientSocket,clientAddr,currentTimer);
}

void OnClose(SOCET pSock)
{
file://自編函數,結束與相應的客戶端的通信,釋放相應資源並做相應處理
endClientSocket(pSock);
}

void OnSend(SOCET pSock)
{
file://自編函數,在給客戶端發數據時做一些預處理
handleOnSend(pSock);
}

void OnReceive(SOCET pSock)
{
recv(...); file://調用API函數,讀出網路緩沖區中的數據包

file://自編函數,將此數據包和發出此數據的客戶端
file://clientSocket封裝成一條網路消息
buildNetMsg(...);

file://自編函數,將此網路消息放入一個消息隊列中,由工作線程去處理
saveNetMsg(...);
SetEvent(...); file://用事件對象觸發工作線程
}

客戶端登陸後,隨即把自己的計算機名發給伺服器,伺服器接到後,把它保存下來。這樣伺服器就可以顯示所有在線客戶端的信息了,包括:客戶端計算機名、IP地址、登陸時間等。

注意: 客戶端沒有OnAccept()函數,但有OnConnect()函數。

工作線程 —
在你的應用程序初始化時,創建並啟動一個工作線程

AfxBeginThread(WorkThread,this,THREAD_PRIORITY_NORMAL);
file://this可能為應用程序的主對話框或主窗口的句柄

UINT WorkThread(LPVOID pParam)
{
while(1)
{
file://等待多重事件到來
int ret = WaitForMultipleObject(...);

switch(ret)
{
case OBJECT_0:
{
if(bNewNetMsg) file://查看網路消息隊列是否有新的網路消息
{
readNetMsg(...); file://如有新的網路消息,則讀出
handleNetMsg(...); file://處理此網路消息
}
break;
}
case OBJECT_0 + 1:
{
file://做退出處理
break;
}
default: break;
}

return 0;
}

客戶端為單線程,登陸伺服器時,用connect()函數給伺服器發連接請求;
客戶端沒有OnAccept()函數,但有OnConnect()函數。
在OnConnect()函數里做發連接請求時的預處理;
在OnReceive()函數里響應並處理網路數據;
在OnClose()函數里響應伺服器的關閉事件;
在OnSend()函數里做發數據時的預處理;

如果你還想實現各客戶端之間的在線交流(即所謂的聊天室),你在客戶端還可以基於UDP協議
再做一套多點對多點的區域網組播模型模型,以後在和你聊,你先把上面的程序實現。

以上的I/O非同步模型基於Windows的消息機制,另外還可以用事件模型、重疊模型或完成埠模型,
建議你參考Windows網路編程指南之類的書。

如果你能對上面的機制很熟練,你肯定已經對Winsock編網路程序的機制有一定理解,接下來你可以進行更精彩的編程, 不僅可以在網上傳輸普通數據,而且還
以傳輸語音、視頻數據,你還可以自己做一個聊天室,和你的同學在實驗室的區域網里可以共同分享你的成果。

㈡ 如何搭建windows網路編程的環境

在 WINDOWS 系統下安裝 Vistual Stio C ++。在 C++ 中就有關於網路 socket 編程的庫函數。例如:如何創建一個 socket、如何 accept 等等。內具體的每一個庫容函數如何使用,那必須還需要看相關的開發手冊了。

㈢ 應該怎麼學習c++windows 網路編程

1. 寫一個來簡單的C/S程序,源發送/接收程序,分別用TCP/UDP實現聊天功能,完成後,你入門了。

2. 寫一個簡單的TFTP客戶端,一個簡單的FTP客戶端,完成後,應用層算是精通了。

3. 把以上程序完成後,做成一個庫,然後用mfc做一個帶界面的聊天程序,一個帶界面的下載程序,mfc就差不多了。

4. 時間不多跳過第二步。買書也好,網上搜索也好,切記,每行代碼自己打。

㈣ windows下網路編程看哪本書好

這個因人而抄異了, 各有千襲秋了,看你的選擇了,有人走的路線是:C→JAVA→JSP。。。 有的C→C#/VB→ASP.NET。。。 有的 C++→ java→jsp 。。。各種各樣的。不過我選擇的是C#這條道,還行吧,集大成者。 而且原來人們對C#能不能開發游戲提出很大的質疑,當XNA出來後這個聲音是越來越小了。 你可以去.com上面搜索下。這個自己依據興趣而定了。
其實到了高階以後,語言都是相同的,你會一門以後第二種學習起來就是短時間就可以掌握。

㈤ Windows網路編程案例教程的套接字摘要

套接字屏蔽了從應用程序直接訪問傳輸層的復雜性。在日常生活中兩個人打電話,那個電話機就可以理解為是通話的介面,只要會用電話機,甭管電話間是如何復雜連接的,通話隨時隨地可以輕松完成。套接字就像那個電話機,編程者只要掌握了套接字技術(類似電話機的使用方法),那麼網路編程(就像打電話)工作就非常簡單了。至於套接字與下層的關系,則由操作系統來實現和封裝,因此,套接字簡化網路編程。

對多數操作系統而言,應用程序和操作系統程序是在不同的保護模式下運行的。應用程序一般不能直接訪問操作系統內部的資源,這樣可以避免應用程序非法破壞操作系統的運行。為此,操作系統需要提供應用程序編程介面(Application Programming Interface,API)給應用程序,使其能夠利用操作系統提供的服務。對於網路操作系統,需要為網路應用程序提供網路編程介面實現網路通信。目前多數操作系統提供了套接字(Socket)介面作為網路編程介面。
Berkeley套接字(BSD套接字)是4.2 BSD Unix操作系統(於1983發布)提供的一套應用程序編程介面,是一個用C語言寫成的網路應用程序開發庫,主要用於實現網間進程通信。Berkeley套接字後來成為其它現代操作系統參照的事實工業標准。Windows操作系統在後來的BSD4.3版基礎上實現了自己的Windows Socket(又稱WinSock)套接字編程介面。

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919