第二人生的源码分析(三十)UDP接收数据和Windows网络关闭
2023-09-14 09:10:40 时间
从上面的协议就知道,有发送数据,就肯定有接收数据;有初始化,就肯定有结束。跟人的生命是一样的,有始就有终。那么第二人生里是怎么样接收数据呢?又是怎么样关闭Windows网络呢?通过下面的代码就可以学会怎么样使用UDP接收数据,并且关闭网络,回收资源给Windows系统。
下面的代码先判断是否创建了socket,如果创建了,就接着先关闭网络通讯,再接着删除socket句柄。最后调用函数WSACleanup来删除网络资源。
#001 void end_net(S32& socket_out)
#002 {
#003
if (socket_out >= 0)
#004
{
#005
shutdown(socket_out, SD_BOTH);
#006
closesocket(socket_out);
#007
}
#008
WSACleanup();
#009 }
#010
下面是通过异步来接收UDP数据。
#011 S32 receive_packet(int hSocket, char * receiveBuffer)
#012 {
#013
// Receives data asynchronously from the socket set by initNet().
#014
// Returns the number of bytes received into dataReceived, or zero
#015
// if there is no data received.
#016
int nRet;
#017
int addr_size = sizeof(struct sockaddr_in);
#018
#019
nRet = recvfrom(hSocket, receiveBuffer, NET_BUFFER_SIZE, 0, (struct sockaddr*)&stSrcAddr, &addr_size);
#020
if (nRet == SOCKET_ERROR )
#021
{
#022
if (WSAEWOULDBLOCK == WSAGetLastError())
#023
return 0;
#024
if (WSAECONNRESET == WSAGetLastError())
#025
return 0;
#026
llinfos << "receivePacket() failed, Error: " << WSAGetLastError() << llendl;
#027
}
#028
#029
return nRet;
#030 }
第17行代码计算接收IP地址的大小。
第19行代码调用Windows API函数recvfrom来接收数据。如果没有数据到达,就产生WSAEWOULDBLOCK的错误。如果网络复位,就会产生WSAECONNRESET的错误。显然调用这段代码后,还会返回其它的错误码SOCKET_ERROR,这是在调用后再处理的。正常的返回是接收到的数据大小,可以不处理的错误就是返回0。
通过上面简单的代码就可以接收到数据,并且是异步的方式接收数据。如果采用同步的方式来接收数据,就需要注意的是调用这个函数并不会立即返回,直到接收到数据才返回来。
相关文章
- python学习笔记(三)— PyCharm 下载安装教程(Windows)
- php环境安装与配置_windows下php环境搭建
- From CVE-2017-0263 To Windows Menu Management Component
- 【技术分享】Windows平台低延迟RTMP、RTSP播放器接口设计探讨
- Windows系统中苹果ipa上传到App Store Connect
- 【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
- Advanced SystemCare Pro 为 Windows PC 提供各种优化和清理工具
- Windows 10 下安装 Apache 2.4.41的教程
- Linux下搭建Windows虚拟机的实现方案(linux下windows虚拟机)
- windows把Exsi、Linux和Windows兼容:实现三端互联的技术之旅(exsilinux)
- 亚马逊商店宣布在Windows 11发布前支持AAB格式 让用户也能按需下载应用
- 在Windows环境下实现Redis服务安装(windows下安装redis)
- 网络Linux与Windows共享网络的实现(linuxwin共享)
- 重温Windows XP的美好,找回当年的纯真
- 比较Windows和Linux:哪一个更好?(windows好还是linux好)
- 在Windows上安装Linux:体验双系统的乐趣(windows安装linux)
- 数千款Windows游戏的开发者 这回做VR有何不同?
- Windows Server 2003升级Win Ser 2008R2之2003强制降级
- Linux轻松访问Windows共享文件夹,搞定文件共享(linux访问windows共享文件夹)
- Linux轻松移植文件至Windows(从linux下载文件到windows)
- 令人惊讶:用Windows编译Linux程序(windows编译linux程序)
- 在Windows上安装Linux系统的步骤(windows安装linux系统)
- Linux安装轻松:Windows只一步之遥(linux装windows)
- 通过Linux在台式机上安装Windows的指南(linux安装windows)
- 放在windows上Windows上安装Redis的步骤(如何把redis的exe)