套接字分为:流式套接字(SOCK_STREAM)(TCP)、数据报套接字(SOCK_DGRAM)(IP、UDP)、原始套接字。


面向连接的socket通信流程:

 套接字Socket套接字Socket套接字Socket

服务器程序中调用的Socket函数:

(1)调用WSAStartup()函数加载Windows Sockets动态库,然后调用socket()函数创建一个流式套接字,返回套接字号s。

(2)调用bind()函数将套接字s绑定到一个已知的地址,通常为本地IP地址。

(3)调用listen()函数将套接字s设置为监听模式,准备好接收来自各个客户机的连接请求。

(4)调用accept()函数等待接受客户端的连接请求。

(5)如果接收到客户端的请求,则accept()函数返回,得到新的套接字ns。

(6)调用recv()函数接收来自客户端的数据,调用send()函数向客户端发送数据。

(7)与客户端的通信结束后,服务器程序可以调用shutdown()函数通知对方不再发送或接收数据,也可以由客户端程序断开连接。断开连接后,服务器进程调用closesocket()函数关闭套接字ns。此后服务器程序返回第4步,继续等待客户端进程的连接。

(8)如果要退出服务器程序,则调用closesocket()函数关闭最初的套接字s。

 

客户端程序中socket函数的调用:

(1)调用WSAStartup()函数加载Windows Sockets动态库,然后调用socket()函数创建一个流式套接字,返回套接字号s。

(2)调用connect()函数将套接字s连接到服务器。

(3)调用send()函数向服务器发送数据,调用recv()函数接收来自服务器的数据。

(4)与服务器的通信结束后,客户端程序可以调用shutdown()函数通知对方不再发送或接收数据,也可以由服务器程序断开连接。断开连接后,客户端进程调用closesocket()函数关闭套接字。

 

UDP socket:数据报套接字

套接字Socket套接字Socket套接字Socket

(1)UDP服务器端算法的步骤描述

步骤1:调用socket()函数创建服务器端无连接套接字。

步骤2:调用bind()函数将套接字绑定到本机的一个可用的端点地址。

步骤3:调用recvfrom()函数从套接字接收来自远程客户端的数据并存入到缓冲区中,同时获得远程客户的套接字端点地址并保存。

步骤4:基于保存的远程客户的套接字端点地址,调用sendto()函数将缓冲区中的数据从套接字发送给该远程客户。

步骤5:与客户交互完毕,调用close()函数将套接字关闭,释放所占用的系统资源。

(2)UDP客户端算法的步骤描述

步骤1:调用socket()函数创建客户端无连接套接字。

步骤2:找到期望与之通信的远程服务器的IP地址和协议端口号;然后再调用sendto()函数将缓冲区中的数据从套接字发送给远程服务器。

步骤3:调用recvfrom()函数从套接字接收来自远程服务器端的数据并存入缓冲区中。

步骤4:与服务器交互完毕,调用close()函数将套接字关闭,释放所占用的系统资源。

相关文章: