wordpress是mvc吗/视频优化软件
当服务端和客户端结束了发送接收数据之后,两端连接的套接字就可以断开了。断开已连接的套接字主要分为三个步骤:首先关闭套接字的发送和接收数据功能,接下来关闭套接字,最后释放Winsock动态库资源。
1 关闭套接字发送和接收数据功能
通过shutdown()函数关闭套接字的发送和接收数据的功能。该函数的格式为
int shutdown(SOCKET s, int how);
其中,参数s表示要关闭功能的套接字;how表示关闭套接字的哪项功能,SD_RECEIVE表示套接字发送数据的功能,SD_SEND表示套接字接收数据的功能,SD_BOTH表示发送和接收数据的功能。如果成功执行了shutdown()函数,则该函数的返回值是0,否则返回值是SOCKET_ERROR。
2 关闭套接字
通过closesocket()函数关闭套接字。该函数的格式为
int closesocket( IN SOCKET s );
其中,参数s是要关闭的套接字。如果成功执行了closesocket()函数,则该函数的返回值是0,否则返回值是SOCKET_ERROR。当成功调用了closesocket()函数后,关闭的套接字就不能再使用了,所以就不能通过关闭后的套接字调用Winsock函数了。
3 释放Winsock动态库资源
在使用Winsock函数时,调用了WSAStartup()函数初始化了Winsock动态库,因此在程序退出之前,需要释放Winsock动态库。通过WSACleanup()函数实现Winsock动态库的释放。该函数的格式为
int WSACleanup( );
如果成功执行了WSACleanup()函数,则该函数的返回值是0,否则返回值是SOCKET_ERROR。
4 相关代码
客户端通过以下代码断开已连接套接字。
int iResult = shutdown(ClientSocket, SD_BOTH);if (iResult == SOCKET_ERROR){closesocket(ClientSocket);WSACleanup();return 1;}
其中,ClientSocket是客户端上已经与服务端连接的套接字。服务端也可以使用相同的方法断开与客户端连接的套接字。