《TCP IP协议与网络编程》课件第10章 网络程序设计实例.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《TCP IP协议与网络编程》课件第10章 网络程序设计实例.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCP IP协议与网络编程 TCP IP协议与网络编程课件第10章 网络程序设计实例 TCP IP 协议 网络 编程 课件 10 网络程序设计 实例
- 资源描述:
-
1、第第10章章 网络程序设计实例网络程序设计实例 第第10章章 网络程序设计实例网络程序设计实例 10.1 使用使用Winsock API设计网络程序的实例设计网络程序的实例10.2 使用使用MFC类库进行网络程序设计的实例类库进行网络程序设计的实例 10.3 基于基于WinInet API的客户程序编写实例的客户程序编写实例10.4 原始套接口原始套接口(SOCK_RAW)程序设计实例程序设计实例10.5 广播通信与组播通信程序设计实例广播通信与组播通信程序设计实例习题习题 第第10章章 网络程序设计实例网络程序设计实例 10.1 使用Winsock API设计网络程序的实例10.1.1 程序
2、源代码1UDP程序1的源代码/编程环境:VC 6.0/程序说明:基于用户数据报协议UDP的程序实例/程序功能:在窗口中点击鼠标左键,则发送信息到端口号为6000的远程机上,并可以从端/口号6000的远程机接收数据第第10章章 网络程序设计实例网络程序设计实例#include stdafx.h#include/说明全局量HINSTANCE hInst;LRESULT CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);/i n t A P I E N T RY Wi n M a i n(H I N S TA N C E hI,HINSTANCE hP,LPSTR l
3、p,int nC)第第10章章 网络程序设计实例网络程序设计实例 MSG msg;HWND hWnd;/实例句柄存入全局量hInsthInst=hI;WNDCLASS wc;memset(&wc,0,sizeof(WNDCLASS);wc.lpfnWndProc=(WNDPROC)WndProc;wc.hInstance=hI;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);第第10章章 网络程序设计实例网络程序设计实例 w c.h b r B a c k g r o u n d=(HBRUSH)COLOR_WINDOW;wc.lpszClassName=W1;
4、RegisterClass(&wc);hWnd=CreateWindowEx(WS_EX_PALETTEWINDOW,W1,UDP程序1端口:8000,WS_OVERLAPPEDWINDOW,100,100,200,100,NULL,NULL,hI,NULL);第第10章章 网络程序设计实例网络程序设计实例 if(!hWnd)return FALSE;ShowWindow(hWnd,nC);/主消息循环while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);第第10章章 网络程序设计实例网络程序设计
5、实例 return msg.wParam;/定义Winsock API需要的量WSADATA ws;SOCKET s1,s2;struct sockaddr_in Cs1A,Cs2A;/发送数据缓冲char sendBuf200;/接收数据缓冲第第10章章 网络程序设计实例网络程序设计实例 char recvBuf200;int len;/存放接收到的字节数#define Cs1Port 8000/本地端口号#define Cs2Port 6000/远程端口号#define Cs1IP 127.0.0.1/本地IP地址#define Cs2IP 127.0.0.1/远程IP地址/消息处理LRE
6、SULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM lP)第第10章章 网络程序设计实例网络程序设计实例 switch(msg)case WM_DESTROY:/关闭程序触发事件/向Windows注销Socket触发事件WSAAsyncSelect(s1,hW,0,0);/释放连接closesocket(s1);/卸载动态链接库Winsock DLLWSACleanup();PostQuitMessage(0);第第10章章 网络程序设计实例网络程序设计实例 break;case WM_CREATE:/初始化触发事件/装载动态链接库W
7、insock DLLWSAStartup(0 x0202,&ws);/创建UDP套接字s1=socket(AF_INET,SOCK_DGRAM,0);/设置地址类型Cs1A.sin_family=AF_INET;/本地端口Cs1A.sin_port=htons(Cs1Port);第第10章章 网络程序设计实例网络程序设计实例/本地IP地址Cs1A.sin_addr.s_addr=inet_addr(Cs1IP);/进行本地绑定len=bind(s1,(struct sockaddr*)&Cs1A,sizeof(Cs1A);/远程地址类型Cs2A.sin_family=AF_INET;/远程端口
8、Cs2A.sin_port=htons(Cs2Port);/远程IP地址第第10章章 网络程序设计实例网络程序设计实例 Cs2A.sin_addr.s_addr=inet_addr(Cs2IP);/向Windows注册网络事件WSAAsyncSelect(s1,hW,WM_USER+1,FD_READ);Beep(2000,200);/发出报警声音break;case WM_USER+1:/Socket触发事件switch(LOWORD(lP)第第10章章 网络程序设计实例网络程序设计实例 case FD_READ:/接收远程信息len=recv(s1,recvBuf,sizeof(recvB
9、uf),0);recvBuflen=0;MessageBox(0,recvBuf,UDP程序1从UDP程序2收到的数据,MB_OK);break;break;第第10章章 网络程序设计实例网络程序设计实例 case WM_LBUTTONDOWN:/点击鼠标左键/将发送数据放入缓冲区wsprintf(sendBuf,Hello,UDP程序2!);len=sizeof(Cs2A);/发送信息sendto(s1,sendBuf,strlen(sendBuf),0,(struct sockaddr*)&Cs2A,len);break;return DefWindowProc(hW,msg,wP,lP)
10、;第第10章章 网络程序设计实例网络程序设计实例 2UDP程序2的源代码/编程环境:VC 6.0/程序说明:基于用户数据报协议UDP的程序实例/程序功能:在窗口里点击鼠标左键,则发送信息到端口为8000的远程机上,并可以从端口/为8000的远程机接收数据#include stdafx.h#include 第第10章章 网络程序设计实例网络程序设计实例/说明全局量HINSTANCE hInst;LRESULT CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);/-int APIENTRY WinMain(HINSTANCE hI,HINSTANCE hP,LPST
11、R lp,int nC)第第10章章 网络程序设计实例网络程序设计实例 MSG msg;HWND hWnd;/实例句柄存入全局量hInst hInst=hI;WNDCLASS wc;memset(&wc,0,sizeof(WNDCLASS);wc.lpfnWndProc=(WNDPROC)WndProc;wc.hInstance=hI;第第10章章 网络程序设计实例网络程序设计实例 wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);w c.h b r B a c k g r o u n d=(HBRUSH)COLOR_WINDOW;wc.lpszClassName
12、=W1;RegisterClass(&wc);hWnd=CreateWindowEx(WS_EX_PALETTEWINDOW,W1,UDP程序2端口:6000,WS_OVERLAPPEDWINDOW,400,200,200,100,NULL,NULL,hI,NULL);第第10章章 网络程序设计实例网络程序设计实例 if(!hWnd)return FALSE;ShowWindow(hWnd,nC);/主消息循环 while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);return msg.wPara
13、m;第第10章章 网络程序设计实例网络程序设计实例/定义Winsock API需要的量WSADATA ws;SOCKET s1,s2;struct sockaddr_in Cs1A,Cs2A;/发送数据缓冲char sendBuf200;/接收数据缓冲char recvBuf200;int len;/存放接收到的字节数第第10章章 网络程序设计实例网络程序设计实例#define Cs1Port 6000/本地端口#define Cs2Port 8000/远程端口#define Cs1IP 127.0.0.1/本地网址#define Cs2IP 127.0.0.1/远程网址/-/消息处理LRES
14、ULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM lP)第第10章章 网络程序设计实例网络程序设计实例 switch(msg)case WM_DESTROY:/关闭程序触发事件/向Windows注销Socket触发事件WSAAsyncSelect(s1,hW,0,0);/释放连接closesocket(s1);/卸载动态链接库Winsock DLL第第10章章 网络程序设计实例网络程序设计实例 WSACleanup();PostQuitMessage(0);break;case WM_CREATE:/程序初始化触发事件/装载动态链接库
15、Winsock DLLWSAStartup(0 x0202,&ws);/创建UDP套接字s1=socket(AF_INET,SOCK_DGRAM,0);第第10章章 网络程序设计实例网络程序设计实例/设置地址类型Cs1A.sin_family=AF_INET;/本地端口Cs1A.sin_port=htons(Cs1Port);/本地IP地址Cs1A.sin_addr.s_addr=inet_addr(Cs1IP);/进行本地绑定len=bind(s1,(struct sockaddr*)&Cs1A,sizeof(Cs1A);/远程地址类型Cs2A.sin_family=AF_INET;第第10
16、章章 网络程序设计实例网络程序设计实例/远程端口Cs2A.sin_port=htons(Cs2Port);/远程IP地址Cs2A.sin_addr.s_addr=inet_addr(Cs2IP);/向Windows注册网络事件WSAAsyncSelect(s1,hW,WM_USER+1,FD_READ);break;case WM_USER+1:/Socket触发事件 第第10章章 网络程序设计实例网络程序设计实例 switch(LOWORD(lP)case FD_READ:/接收远程信息len=recv(s1,recvBuf,sizeof(recvBuf),0);recvBuflen=0;M
17、essageBox(0,recvBuf,UDP程序2从UDP程序1收到的数据,0);break;break;第第10章章 网络程序设计实例网络程序设计实例 case WM_LBUTTONDOWN:/点击鼠标左键wsprintf(sendBuf,Hello,UDP程序1!);len=sizeof(Cs2A);/发送信息sendto(s1,sendBuf,strlen(sendBuf),0,(struct sockaddr*)&Cs2A,len);break;return DefWindowProc(hW,msg,wP,lP);第第10章章 网络程序设计实例网络程序设计实例 10.1.2 程序运行
18、结果在这两个程序调试、编译和链接正确后,就可以执行这两个程序了。这两个程序执行后的窗口如图10-1所示,其中,图(a)是UDP程序1执行后的窗口,图(b)是UDP程序2执行后的窗口。第第10章章 网络程序设计实例网络程序设计实例(a)UDP程序1的窗口 (b)UDP程序2的窗口 图10-1UDP程序执行后的窗口第第10章章 网络程序设计实例网络程序设计实例 程序执行后就可以检查它们所实现的功能了。在UDP程序1的窗口中点击鼠标左键,则可以发送数据给UDP程序2,UDP程序2在收到UDP程序1发送的数据后,弹出如图10-2(a)所示的窗口,并显示收到的数据。同样,如果在UDP程序2的窗口中点击鼠
19、标左键,则可以发送数据给UDP程序1,UDP程序1在收到UDP程序2发送的数据后,弹出如图10-2(b)所示的窗口。第第10章章 网络程序设计实例网络程序设计实例(a)UDP程序2收到的信息 (b)UDP程序1收到的信息图10-2UDP程序收到数据后弹出的窗口第第10章章 网络程序设计实例网络程序设计实例 在学习这两个程序的过程中,我们应该注意两个问题:(1)在程序中,虽然使用的是数据报传输方式(SOCK_DGRAM),但却使用bind()函数进行了地址的绑定。(2)这两个程序的功能是一样的,所以代码几乎是相同的。第第10章章 网络程序设计实例网络程序设计实例 10.2 使用使用MFC类库进行
20、网络程序类库进行网络程序设计的实例设计的实例 10.2.1 创建客户端程序我们使用VC+提供的可视化集成编程环境来创建客户端程序。创建客户端程序的主要步骤介绍如下。1创建一个工程使 用 V C+的 应 用 程 序 生 成 向 导(M F C AppWizardexe)创建一个基于对话框的工程,该工程的名称为CSockClient。2设计程序对话框如图10-3所示。第第10章章 网络程序设计实例网络程序设计实例 图10-3添加类变量 第第10章章 网络程序设计实例网络程序设计实例 3生成CAsyncSocket类的子类MySock4在MySock.ccp文件中添加文件包含信息在生成的MySock
21、.cpp中添加如下文件包含信息:#include CSockClient.h#include CSockClientDlg.h“5向MySock.h文件中添加代码向MySock.h文件中添加如下代码:public:BOOL m_bConnected;/是否连接 UINT m_nLength;/消息长度 char m_szBuffer4096;/消息缓冲区第第10章章 网络程序设计实例网络程序设计实例 6重载MySock.ccp文件中的各函数(1)MySock()函数重载的代码如下:MySock:MySock()m_nLength=0;memset(m_szBuffer,0,sizeof(m_s
22、zBuffer);m_bConnected=FALSEMySock:MySock()/关闭套接字if(m_hSocket!=INVALID_SOCKET)Close();第第10章章 网络程序设计实例网络程序设计实例(2)OnReceive()函数重载的代码如下:void MySock:OnReceive(int nErrorCode)m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);/下面两行代码用来获取对话框指针CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();CCSockClientD
23、lg*pDlg=(CCSockClientDlg*)pApp-m_pMainWnd;pDlg-m_MSGS.InsertString(0,m_szBuffer);memset(m_szBuffer,0,sizeof(m_szBuffer);CAsyncSocket:OnReceive(nErrorCode);第第10章章 网络程序设计实例网络程序设计实例(3)OnSend()函数重载的代码如下:void MySock:OnSend(int nErrorCode)Send(m_szBuffer,m_nLength,0);m_nLength=0;memset(m_szBuffer,0,sizeof
24、(m_szBuffer);/继续提请一个读的网络事件,接收Server消息AsyncSelect(FD_READ);CAsyncSocket:OnSend(nErrorCode);第第10章章 网络程序设计实例网络程序设计实例(4)OnConnect()函数重载的代码如下:void MySock:OnConnect(int nErrorCode)if(nErrorCode=0)m_bConnected=TRUE;CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();CCSockClientDlg*pDlg=(CCSockClientDlg*)pA
25、pp-m_pMainWnd;第第10章章 网络程序设计实例网络程序设计实例 memcpy(m_szBuffer,Connected to,13);strncat(m_szBuffer,pDlg-m_szServerAdr,sizeof(pDlg-m_szServerAdr);pDlg-m_MSGS.InsertString(0,m_szBuffer);/提请一个读的网络事件,准备接收AsyncSelect(FD_READ);CAsyncSocket:OnConnect(nErrorCode);第第10章章 网络程序设计实例网络程序设计实例 7新建一个输入地址的对话框新建一个输入地址信息的对话框
展开阅读全文