返回介绍

从客户端读取数据

发布于 2024-10-10 23:21:39 字数 2771 浏览 0 评论 0 收藏 0

你已经会向客户端发消息了,那怎么从客户端读取数据呢?套接字用

send() 写数据,用 recv() 读数据:<读了几个字节> = recv(<描述符>, <缓冲区>, <要读取几个字节>, 0);

如果用户在客户端输入一行文本,然后按下回车,recv() 函数就会把文本保存在一个像这样的字符数组中:

牢记以下几点:

字符串不以\0 结尾。

当用户在 telnet 输入文本时,字符串以\r\n 结尾。

recv() 将返回字符个数,如果发生错误就返回-1,如果客户端关闭了连接,就返回 0。

recv() 调用不一定能一次接收到所有字符。

最后一点很重要,它意味着可能需要多次调用

recv() 。

revc() 用起来十分繁琐,最好把它封装在某个函数中,比如下面这个函数,它在指定数组中保存以\0 结尾的字符串。

滑野雪

这是简化 recv() 的一种方法,你可以做得更好吗?为什么不自己写一个 read_in() 呢?我们在 等你的好消息。 headfirstlabs.com

代码熟食

这里还有一些在写服务器时会用到的代码,你能看懂它们是怎么工作的吗?

下面就来试用一下这几个服务器函数……

练习

下面就开始写互联网 knock-knock 服务器的代码。这次你要写更多代码,不过可以使用上一页中现成的代码,我们为你开了一个头。主函数需要你来写。需要创建一个新的服务器套接字,然后保存在 listener_d 中;服务器套接字将绑定到 30000 端口;队列长度为 10。程序流程图如下:别忘了检查错误。如果用户回答错误就向它发送一条错误消息,然后关闭连接,等待其他客户端连接。加油!

 

练习解答

下面就开始写互联网 knock-knock 服务器的代码。这次你要写更多代码,不过可以使用第 479 页中现成的代码,我们为你开了一个头。你的代码应该看起来像下面这样,不一模一样也没关系,只要代码能按正确的套路说笑话并且能处理错误就行。

试驾

knock-knock 服务器已经竣工,下面就来编译运行。

服务器正在等待连接。打开另一个控制 台,用 telnet 连接它。

服务器开始讲笑话了。如果违反协议,乱回答一句会怎么样?

服务器成功校验了你发送给它的数据,然后立马关闭了连接。当你不想运行服务器时,可以切回服务器窗口按 Crtl-C 关闭,它还会和你说拜拜:

太好了!服务器不辱使命。

真的吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文