導航:首頁 > 網路問題 > Windows下網路編程怎麼學

Windows下網路編程怎麼學

發布時間:2022-09-09 23:23:45

㈠ 怎樣學習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編網路程序的機制有一定理解,接下來你可以進行更精彩的編程, 不僅可以在網上傳輸普通數據,而且還
以傳輸語音、視頻數據,你還可以自己做一個聊天室,和你的同學在實驗室的區域網里可以共同分享你的成果。

㈡ 學習網路編程需要具備什麼知識基礎

學習網路編程需要具備計算機基礎知識,以及一些英語基礎,看題主描述是學習過C語言,所以算是有一定基礎的,所以如果想要學習網路編程還是比較容易的。

現在用的比較多的是java,而且java的應用范圍也比較廣,即使後面不從事網路編程,想要做其他編程類的工作也是比較容易的,所以選擇學java可能是個不錯的選擇。網路編程現在是在Windows下應用的比較廣泛,可以先從Windows下學起。

學習網路編程的方式無非兩種一種是自學,一種是去專業的學校學,選擇哪種學習方式,題主可以根據自身的時間及經濟狀況來進行選擇,畢竟適合自己的才是最好的。

㈢ 學習windows網路編程前需要學習哪些知識我學過C/C++,是自學的,理解性的學習,然後看了

windows程序設計裡面不是涉及了套接字了嗎?網路編程基本也就那些內容socket和多線程比較重要一點
windows核心編程主要是講內核對象,內存管理之類的,簡單的說<windows程序設計>的主要內容是
user32.dll和gdi32.dll中的調用,而<windows核心編程>主要講kernel32.dll中的調用

你可以看一下<C++網路編程>,一共兩卷,內容不是很多,但對你會很有幫助的,都是網路編程方面的知識

㈣ 計算機編程如何學習(軟體、網路)

vivado視頻免費下載

鏈接:https://pan..com/s/1KeaJ2Z45qT5_v9aEFQpLNQ

提取碼:kaeq

java視頻|53.mp4|52_定義輸入輸出格式.mp4|51_綜合練習(二).mp4|50_綜合練習(一).mp4|49_開發工具之Eclipse(四).mp4|48_開發工具之Eclipse(三).mp4|47_開發工具之Eclipse(二).mp4|46_開發工具之Eclipse(一).mp4

㈤ 想學網路編程從哪裡開始

學網路編程,其實要學很多的,要從基本的編程做起,並不是說學哪樣編程!

1、計算機是有什麼組成的,CPU是什麼東西,其工作原理是什麼。(對於這些以及下面將要提到的概念我不會告訴你什麼答案,你可以看相應的教材,關於教材我會在下一部分詳述,記住理解最重要!)

2、機器語言和微指令集的概念。

3、程序的概念。

4、匯編語言是低級語言但不是機器語言。

5、高級語言主要有那些?(C,C++,Basic,Pascal,Fortran,C#,Java等等;如果你是中國軟體業的英雄,你也寫一門語言,最好不用英語) 6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)

7、HTML、XML等是標識性語言。

8、Prolog是人工智慧語言。

9、操作系統OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)

10、Windows編程說白了就是Windows API的調用。(中國的程序員很多隻是會編windows程序,用的是VB,我的建議是這些程序員頂多隻是低級編碼員,我稱其是coder)

11、VC++、VB、BC、BCB、Delphi、VF等都只是編程的工具和環境,不是編程語言。

12、面向結構的設計概念。

13、面向對象的概念。(好好理解,兄弟,這個東西還是很重要的)

14、軟體工程的概念和原理。(如果你想當老總就需要好好研究了,系統分析員比編碼員要高一個等級,薪水也高喲)

15、資料庫的概念。(要熟悉一些著名的資料庫系統和語言的名字,如Orcle,SQL,DB2,DyBase等)

16、了解網路概念。

17、了解多媒體概念。

18、熟悉和掌握數據結構和基本演算法。

19、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學習,一個月以後你 就會有一個基本的概念;兩個月以後你就會感覺自己有了全面的基礎知識;當你知道編程序是怎麼回事時,說明你已經入門了。也有很多人編了很多年程序還沒有入 門呢,你不會希望自己步其後塵吧。要有信心和耐心。沉不住氣怎麼能成大事?!)

(四) 教材推薦

――-推薦的教材主要還是針對概念來的,最好選用名校的教學用書。

1、《計算機組成原理》(熟悉)

2、《數據結構》(掌握)

3、《操作系統》(了解->熟悉)

4、《The C language》(掌握)

5、《編譯原理》(了解原理)

6、《匯編語言》(了解)

7、《計算機網路》(了解)

8、《軟體工程》(了解)

9、《關系資料庫》(熟悉)

10、《The C++Languege 》(掌握)

11、《面向對象設計》(掌握;結合C++學習)

(五)一些經驗和體會

1、真正的程序員用C++;(一位專家說的)

2、動手去編程序;

3、動腦去思考;

4、要有良好的編程風格;

5、讀書,讀好書,盡量讀原版書!(我反復強調這一點,讀書要有選擇,堅持讀好書,名家出的經典書,不要浪費實踐在一些粗製濫造的書上面;堅持博覽群書)

6、有自己的學習計劃;

7、總結自己的經驗教訓;(准備一個筆記本,記錄錯誤和心得)

8、不要怕學新東西;

9、要有軟體工程的思想;

10、善於發現問題,然後去尋找答案;

11、向高手請教;(要虛心直到你成為高手)

12、和同行交流;(不善於交流肯定不行)

13、懂得軟體的實質,不要被千變萬化的表象所迷惑;

14、真正要學慣用的是編程語言和方法,不是什麼庫,什麼類,什麼工具;(學用那些什麼庫都比較簡單,但光會這些庫,我覺得還遠遠不夠)

15、學習wiodows編程主要是學習windows OS和win32 API;

16、有空了解一下嵌入式開發;

17、有空了解一下PDA軟體開發;

18、了解一下.NET框架和C#語言,也許它是你新的衣食父母;

19、要有耐心,不要作浮躁的人;

20、對程序加註釋,並保留你的老程序;

21、學到的東西越多,了解的越多,你就越接近專家;

22、有空去逛逛CSDN,那裡有你很多知己;

23、要有信心成為一個優秀的程序;

(六)一些好書的推薦

1、《The C Programming language》 (Keinighan & Dennis Ritchie 1988)

2、《The C++ Programming Languague》(Bjarne Stroustrup 1997)

3、《Inside The C++ Object Model》 (lippmans)

4、《Effective C++》 (同上)

5、《More Effective C++》 (同上)

6、《Exceptional c++》

7、《C++面向對象高效編程》

8、《設計模式》

9、《Thinking In C++》

10、《The Standard C++ Bible》(一般推薦)

11、《The Art of Computer Programming 》

12、《Programming Windows》 (Charles Petzold)

13、《VC++5.0技術內幕》

14、《MFC 深入淺出》

15、《軟體需求》

16、《Advanced Windows》

17、《C++ primer》

18、《win32程序員參考手冊》

19、《用TCP/IP進行網際互連》

20、《COM 本質論》

(七)學習計劃

――-這個學習計劃是我個人定的,也共享給大家參考一下,共同進步吧。 1、《計算機組成原理》

2、《操作系統》

3、《數據結構》

4、《匯編語言》

5、《 C 》

6、《 C++ 》

7、《VC 技術內幕》

8、《Programming Windows》

9、《深入淺出MFC》

10、《Advanced Windows》

11、《Inside The C++ Object Model》

12、《Thinking in C++》

13、《Effective C++》

14、資料庫

15、網路

16、嵌入式OS和編程

17、硬體單片機

18、.NET和C#

19、軟體工程

20、UNIX和Linux

㈥ Windows下C語言網路編程快速入門。

C語言的學習,一般的方式是,先學C,然後是C++,最好還要有匯編語言和微機原理基礎,然後才是Visual
C++。這樣的方式,對學習者來說,要花費很多時間和耐力。而在學校教學中,也沒有時間深入學習Windows編程的實用技術了。其實,具有了C語言基礎後,再有一些基本的C++類的概念,就可以直接學習Windows
C編程了。一、走近Windows
C語言很多語言都把顯示一個「Hello,World!」做為第一個入門程序,
C語言的第一個程序是這樣的:#include<stdio.h>
main()
{
printf(「Hello,World!」);
}如果把main函數寫成帶參數的main函數,應該是:#include<stdio.h>
main(int
arge,char
*argv[])
{
printf(「Hello,World!」);
}Windows
C的第一個程序和這個程序在形式和原理上都是一致的,只是有兩點不同:1.
主函數接收的形參不只是命令行中的字元串的個數和字元串的首地址。2.
C語言的很多函數在Windows
C中都可以繼續使用,但象printf()屏幕顯示等函數就不能繼續使用了。因為Windows是多任務操作系統,屏幕已不再為某一個應用程序所獨有,Windows
C應用程序要顯示字元串,需要使用Windows提供的API函數,開自己的窗口下面是一個最簡單的,顯示「Hello,World!」的Windows
C程序:#include<windows.h>
APIENTRY
WinMain(HINSTANCE
hInstance,HINSTANCE
hPrevInstance,
LPSTR
lpCmdLine,int
nCmdShow)
{
MessageBox(NULL,"Hello,World!","第一個Windows
C程序",MB_OK|MB_ICONASTERISK);
}主函數的形參有四個:1)
Hinstance:接收程序運行時當前實例的句柄;2)
HprivInstance:前一個實例的句柄;3)
LpCmdLine:程序命令行指針;4)
NcmdShow:一個用來指定窗口顯示方式的整數。這幾個參數的使用我們會在深入的學習中介紹的。顯示Hello,Word!字元串,我們使用了一個MessageBox函數,這個函數會在屏幕上顯示一個對話框,它的原型是:int
MessageBox(HWND
hWnd,LPCTSTR
lpText,LPCTSTR
lpCaption,UNIT
uType)四個參數分別是:1)
HWnd:父窗口的句柄;2)
LpText:要顯示字元串的指針;3)
LpCaption:對話框標題字元串的指針;4)
UType:顯示在對話框上的小圖標的類型。使用這個函數要包含windows.h頭文件。調試一下,怎麼樣?窗口上彈出了一個「第一個Windows
C程序」對話框,上面有一行字:「Hello,World!」。世界真的很美好啊!!
你連答案也發啦,暈!

㈦ 想學網路編程 要從哪裡開始

先學Windows底層網路編程,在去學一些比較高級的語言的網路編程,比如說C#、Java體會一下強大的現代化的網路編程工具。
Windows底層網路編程與C語言差不多,只不過調用了很多的API函數,同時學習Windows可以知道一些系統的底層原理,還可以加強C語言的編程能力。
哈哈,不說了。

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

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

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

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

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

閱讀全文

與Windows下網路編程怎麼學相關的資料

熱點內容
軟體有網卻顯示無網路連接怎麼辦 瀏覽:336
自己的無線網路為什麼不能用 瀏覽:812
車載網路技術要求有哪些 瀏覽:10
小白盒只能連接路由器網路 瀏覽:538
網路購景區票哪裡便宜 瀏覽:812
wifi沒網路是什麼情況 瀏覽:483
什麼叫小學生網路教育 瀏覽:114
網路營銷的工作 瀏覽:9
福建網路通信軟體技術市價 瀏覽:839
如何准備網路主播 瀏覽:252
東芝bios無線網路開關 瀏覽:804
上海手機端網路推廣渠道介紹 瀏覽:968
賓館房間網路使用網吧信號 瀏覽:510
明明蘋果手機網路滿格卻下載不了 瀏覽:226
乙太網絡安全性 瀏覽:105
華為無線投屏需要連接網路嗎 瀏覽:507
網路小說賣了多少錢 瀏覽:438
聯通用移動網路嗎 瀏覽:376
蘋果手機蜂窩網路與無線要不要開 瀏覽:42
網路有信號無法連怎麼了 瀏覽:858

友情鏈接