套接字不是传统意义上的数据流
到目前为止,你见过的数据流都一样,不管是连接文件的数据流,还是连接标准输入或输出的数据流,都可以用
fprintf() 和 fscanf() 与它们通信。但套接字有一点点不同,套接字是双向的,它既可以用作输入也可以用作输出,也就是说要用其他函数和它通信。
如果想向套接字输出数据,就要用 send() 函数,而不是 fprintf() 。
记住:一定要检查系统调用的返回值,send() 也不例外。网络错误随处可见,服务器必须处理它们。
百宝箱
如何选择端口号?为服务器程序选择端口号时千万要小心。现如今有各式各样的服务器,所以不要选其他程序用过的端口号。在 Cygwin 和大多数 Unix 中有一个/etc/services 文件,它列出了很多常用服务使用的端口号。在选择端口时必须确保没有其他程序用过。端口号从 0 开始一直到 65535,首先你需要决定用小号码(1024 以下)还是大号码。很多计算机中,只有超级用户或管理员才有资格使用 1024 号以下的端口,因为小号的端口留给了一些知名服务,如网页服务器和邮件服务器。操作系统只允许管理员使用这些端口,防止普通用户启动一些多余的服务。通常情况下,请使用 1024 号以上的端口。
磨笔上阵
下面这个服务器会为已连接的客户端随机提出忠告,但它少了很多系统调用。你需要把它们补全。再有,程序向客户端发送一条忠告,然后就结束了。其中有一段代码需要循环执行,请问是哪段?
磨笔上阵解答
下面这个服务器会为已连接的客户端随机提出忠告,但它少了很多系统调用。你需要把它们补全。再有,程序向客户端发送一条忠告,然后就结束了。其中有一段代码需要循环执行,请问是哪段?
试驾
编译服务器,看看会发生什么。
趁服务器还在运行,我们打开另一个控制台,用 telnet 连接几次试试。
太好了,服务器正确运行了,你用 127.0.0.1 作为 IP 地址,因为客户端和服务器在同一台机器上运行。你也可以从其他地方连接服务器,我们将得到同样的答复。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论