⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14.5 基于 udp的网络应用程序的编写及服务器端程序.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
14.5 基于 UDP的网络应用程序的编写 
14.5.1 服务器端程序
如果在读者的 VC++开发环境中,先前的工作区还是打开的,首先就关闭该工作区,然后利用
【 New\Files...】菜单命令新建一个工程。同样,选择 Win32 Console Application 类型,工
程名称为 : UdpSrv。并在应用程序创建向导的第 1步选择 : An ennpty project选项,以创
建一个空的工程。接着利用【文件\新建】菜单命令添加一个 C++源文件: UdpSrv.cpp, 然后在此
文件中添加实现基于 UDP的服务器端程序的代码,结果如例 14-3所示。
例 14-3 

#include <winsock2 .h> #工 nclude <stdio .h> 
void main () 
. 

//加载套接字库 
WORD wVersionRequested; 
WSADATA wsaData; 
int err; 

, 
wVersionRequested = MAKEWORD( 1 , 1 ); 
err = WSAStartup( wVersionRequested, &wsaData ) ; 
if ( err ! = 0 ) { 
{
return; 
}
if ( LOBYTE( wsaData.wVersion ) ! = 1  || HIBYTE( wsaData.wVersion ) != 1 ) 
{ 
WSACleanup( ); 
return; 
} 
//创建套接字
SOCKET sockSrv=socket(AF一INET, SOCK_DGRAM, 0); 
SOCKADDR_IN addrSrv; 
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY) ; 

addrSrv.sin_family=AF一工 NET; 
addrSrv. sin-po r t=htons(6000); 
//绑定套接字 
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
//等待并接收数据 
SOCKADDR_IN addrClient; 
int len=sizeof(SOCKADDR); 
char recvBuf[100l; 
recvfrom(sockSrv,recvBuf ,100 , 0, (SOCKADDR*)&addrClient , &len); 
printf("%s\n" , recvBuf) ; 
//关闭套接字 

closesocket(sockSrv); 
WSACleanup() ; 

同样,因为在利用套接字编写网络应用程序时,都需要套接字库,所以这部分代码可以重用。因
此可以直接复制上面程序中已有的这部分代码。然后按照上面介绍的基于 UDP(面向无连接)的 
socket编程的服务器端程序流程完成该程序。
面创建套接宇 (sockeO。
与上面基于 TCP的服务器端程序一样,这里也需要调用 socket函数创建一个套接字,第一个参
数只能是 AF INET (或 PF_INET).因为现在是基于 UDP的网络应用程序,应该创建数据报套接字,
因此第二个参数应指定为 SOCK_DGRAM .第三个参数设为 0。
③将套接字绑定到一个本地地址和端口上 (bind)。首先定义了一个 SOCKADDR_IN类型的变量: 
addrS凹,然后对其数据成员进行赋值。
接下来调用 bind函数,将套接宇与本地的一个 E地址与端口相绑定。CIl等待接收数据 
(recvfrom)。对于基于 UDP的服务器端来说,就是一个接收端,所以接下来调用 recvfrom函数
收数据。注意,在编写基于 UDP的网络程序时,在接收数据时,使用的是 recvfrom函数。而前
面基于 TCP的服务器端程序接收数据时使用的是 recv函数。
548 I ......... 


为了接收数据,首先定义了一个地址结构的变量: addrClient,用来接收发送方的地址信息。然
后定义-个整型变量: len,并将地址结构的长度作为初值赋给该变量。接下来定义-个有 100个
元素的字符数组: recvBuf,用来接收数据。之后,就可以调用 revefrom函数接收数据了。
在接收到数据之后,利用 printf函数将其打印输出。
由关闭套接字。
在通信完成之后,调用 closesocket函数关闭套接字,释放为该套接字分配的资源。最后调用 
WSACleanup函数,终止对套接字库的使用。
完成程序代码之后,还需要在工程设置对话框的链接选项卡下添加库文件: Ws2_32.lib 的链接。
然后利用 Build生成 UdpSrv程序。可以看到,基于 UDP的服务器端程序的编写比较简单,在绑
定套接字之后就可以接
收数据了,不需要建立监听,或者说建立连接。 
. 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -