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

📄 14.5.2 客户端程序.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
14.5.2 客户端程序
现在编写基于 UDP的网络客户端应用程序,与上面基于 TCP的网络应用程序一样,这里也在同一
个 UdpSrv工作区中创建客户端应用程序。同样,创建一个空的 Win32 ConsoleWin32 Console 
Application类型的工程,名称为: UdpClient。然后为该工程添加一个 C++源文件: 
UdpClient.cpp,然后在此文件中添加实现基于 UDP的网络客户端程序的代码,结果如例 14-4
所示。 
例 14-4 


#include <Winsock2.h> 
#include <stdio.h> 
void tnain ( ) 
{ 
11加载套接字库 
WORD wVersionRequested: 
WSADATA wsaData: 
int err: 
wVersionRequested = MAKEWORD( 1 , 1 }: 
err = WSAStartup( wVersionRequested, &wsaData }: 
if ( err ! = 0 ) { 
return; 

if ( LOBYTE( wsaData.wVersion ) != 1 II 
HIBYTE( wsaData.wVersion ) != 1 ) { 
WSACleanup( ); 
return; 

//创建套接字 
SOCKET sockClient=socket(AF_工NET,SOCK_DGRAM, 0) ; 
SOCKADDR_IN addrSrv; 
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); 

addrsrv.sin_family=AF_工NET; 
addrSrv.sin-por t=htons(6000) ; 
//发送数据 
sendto (sockClient , "Hello" , strlen( "Hello") +1, 0, 
(SOCKADDR*)&addrSrv , sizeof(SOCKADDR)) ; 

//关闭套接字 
closesocket(sockClient); 
WSACleanup(); 

同样,因为在利用套接字编写网络应用程序时,都需要套接字库,所以这部分代码可以重用。因
此可以直接复制上面程序中己有的这部分代码。然后按照上面介绍的基于UDP(面向无连接)的
socket编程的客户端程序流程完成该程序。
llJ创建套接宇 (socket)。同样,首先需要调用socket创建套接字,第一个参数只能是AF_INET(或
PF一副ET);第二个参数是套接宇类型应该是SOCK_DGRAM;第三个参数指定为0。
(I)向服务器发送数据 (sendto)。
当创建完套接字之后,因为对基于 UDP的客户端程序来说,也不需要将套接字绑定到本地的P地
址和端口号上,可以直接发送数据,这需要调用 sendto函数。所以,首先定义一个地址结构类
型的变量: sockClient.并给其成员赋值。首先利用 inet-addr函数将点分十进制格式表示的F
地址转换为u_long类型的数值,同样,因为是在同一台机器上运行服务器端程序和客户端程序,
所以, JP地址可以设置为 127.0.0.1。如果是两台机器上分别运行服务器端程序和客户端程序,
这时就应该是服务器程序运行所在的机器的 E地址。另外,端口应设置为服务器端等待请求的端
口号,本例是6∞0。
接下来,调用sendto函数发送一个简单的字符串: Hello.并且多发送一个字节,主要
是为了服务器端接收到该数据后可以将最后一个元素设置为'飞O'.表示字符串的结尾。由关闭套
接字。数据发送完成之后,调用closesocket函数关闭套接字的使用。最后,调用WSACleanup
函数,终止对套接字库的使用。同样,本程序也需要链接库文件: ws2_32.1ib。可以按照上面介
绍的添加库文件的方
法,为UdpClient工程添加该库文件的链接。最后,利用Build命令生成客户端应用程序: 
UdpC1ient.exe。这时,基于 UDP的服务器端和客户端程序都己经生成了,同样,服务器端程序
应先
启动,否则无法完成通信。然后启动客户端程序。这时,客户端程序和服务器端程序的界面如图 
14.12所示。
550 I ~胁'

详解


罔 14.12基于 UDP的网络应用程序运行结果
可以看到,这时客户端己经终止了,服务器端收到一条信息: Hello。这里,服务器端作为接收
端,客户端作为发送端。
通过以上的程序代码,可以看到,基于 UDP的网络应用程序的编写非常简单,因为不需要建立连
接,所以对客户端程序来说,当创建套接字之后,就可以直接利用 sendto函数发送数据了。应
注意的是,基于 TCP和基于 UDP的网络应用程序在发送和接收数据时使用的函数是不一样的:前
者使用 send和 recv,后者使用 sendto和 recvfrom o 

⌨️ 快捷键说明

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