BSD Socket 服务器必须通过调用 bind(int socketFileDescriptor, sockaddr *addressToBind, int addressStructLength) 与具有唯一地址的 Socket 关联. 它会接收一个 Socket 并将其分配或是绑定到某个特定的地址与端口. 绑定成功返回 0, 否则返回 -1. 绑定 Socket 后, 接下来的步骤取决于你在 socket() 调用中指定的连接类型, 即 UDP 或 TCP:
- 对于 UDP Socket 来说, 现在就可以开始向外界传输数据了, 因为 UDP 是个无连接的协议, 不需要在另一端监听
- TCP Socket 是个面向连接的协议, 需要在 Socket 的另一端有参与者. 要想建立 TCP 连接, 你需要调用 listen(int socketFileDescriptor, int backlogSize) 以建立好缓冲区队列的数据结构
作为第一个参数传递进去的 Socket 会成为只读 Socket, 不能用于发送消息. backlogSize 表示有多少个挂起的连接在排队的同时等待服务端代码的使用. 在监听时, 服务器会等待进来的连接请求并调用 accept(int socketFielDescriptor, sockaddr *clientAddress, int clientAddressStructLength)来接收请求. 这会将挂起的请求从缓冲队列中移除, 并使用客户端的地址信息(最主要的是 IP 地址与端口)来装配 clientAddress 结构体. 接受了挂起的请求后, 服务器就可以从客户端接收消息
网友评论