㈠ 怎样学习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
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. 时间不多跳过第二步。买书也好,网上搜索也好,切记,每行代码自己打。