📄 14.5 基于 udp的网络应用程序的编写及服务器端程序.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 + -