BLAB:服务器连接网络四部曲
为了与外界沟通,C 程序用数据流读写字节。到目前为止,你用过三种数据流,它们分别连接的是文件、标准输入和标准输出。如果想要写一个与网络通信的程序,就需要一种新数据流——套接字。
在使用套接字与客户端程序通信前,服务器需要历经四个阶段:绑定(Bind)、监听(Listen)、接受(Accept)和开始(Begin),首字母缩写为 BLAB。
1. 绑定端口
计算机可能同时运行多个服务器程序:一个发送网页,一个发送邮件,另一个运行聊天服务器。为了防止不同对话发生混淆,每项服务必须使用不同的端口(port)。端口就好比电视频道,我们在不同端口使用不同的网络服务,就像我们通过不同频道收看不同的电视节目。
服务器在启动时,需要告诉操作系统将要使用哪个端口,这个过程叫端口绑定。knock-knock 服务器将使用 30000 端口,为了绑定它,你需要两样东西:套接字描述符和套接字名。套接字名是一个表示“互联网 30000 端口”的结构。
2. 监听
如果你的笑话服务器出了名,可能会有很多客户端同时连接它。想让客户端排队等待连接吗?可以用
listen() 系统调用告诉操作系统你希望队列有多长。
调用 listen() 把队列长度设为 10,也就是说最多可以有 10 个客户端同时尝试连接服务器,它们不会立即得到响应,但可以排队等待,而第 11 个客户端会被告知服务器太忙。
3. 接受连接
一旦绑定完端口,设置完监听队列,唯一可以做的就是等待。服务器一生都在等待有客户端来连接它们。accept() 系统调用会一直等待,直到有客户端连接服务器时,它会返回第二个套接字描述符,然后就可以用它通信了。
服务器将用新的连接描述符 connect_d ……
脑力练习
为什么 accept() 系统调用要创建一个新的套接字描述符?服务器为什么不用监听端口的那个套接字通信?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论