Linux网络编程

  1. http请求主要是客户端B/S都是http协议,一种数据包格式 服务器端做出响应

     get请求不用提交数据,post需要

  2. 请求行分为三部分

     请求方式 get是静态资源请求,这个刚代表资源目录,随便那个目录,而不是服务器的根目录 第三个是协议版本,现在一般都是1.1版本 看不见的?R/n一定要注意

  3. get请求 携带动态数据的方式

     不会出现在数据部分,而是求晴天的第二部分,请求目录结束之后,问号开始,取地址符分割的键值对,请求栏也有缓冲区,大概是8k超过8K就后面的没了

  4. 怎么知道请求行解析完了嗎 /r/n 怎么知道请求头键值对 冒号加空格  空行的作用
  5. 四种传输方式

     

     

     文件描述分割用封号,描述完有\r\n 分界线号码是随机生成 分界线之间是数据块

  6. 服务器响应格式

     空行怎么加\r\n 格式是必须有的 utf-8支持中文用封号隔开 200状态码 成功! 其他可加可不加

  7. 状态码

     503 一会再来试一试 500比较宽泛,我也不知道 301 302 临时 永久重定向 映射  403不搭理你

  8. 边缘非阻塞  检测到只通知一次 那么就需要把所有的消息都检测出来

     处理get请求 一个buffer 缓冲区的写事件对程序员没有用 因为一检测都是缓冲区可写

  9. buffe不够大也没关系 后面的数据咱不要了 

     只有请求行最有用 为了避免数据覆盖,需要一个临时的复制进去,后面

  10. 如何判断是读取失败还是数据读完了  因为是非阻塞的都是返回-1 如何判断

     Linux系统函数会提供一个全局变量errornumber,通过error值确定  erron.h

  11. 字符串匹配

     

     百分号就是占位符 后面词的占位符

  12. 处理请求行代码

     比较不区分带小写的在头文件 strings里

  13. 修改工作路径

     

     

     chdir 将服务器工作路径切换到请求的路径,以操作这里面的资源

  14. 如何将目录中的文件发送给客户端  很简单首先要发文件名其次是文件内容所以需要文件描述符

     文件传输是TCP 两段建立连接后就可以流失发送,不在乎是不是一整块 一个字节还是一个G

  15. 如何打开文件  open函数指出文件名和打开方式

     采用一种严苛的条件 断言 头文件

     read读数据 返回一个块 当块等于0就是读完了 休眠非常重要 人为的拥塞控制  有一个用户区到内核去的复制

  16. Linux系统文件发送

     sendfile四个参数  发送的用于通信的文件描述符  2.文件系统内部打开的文件描述符  3 偏移量一般是0从头开始读 4读多少个字节一般是·读完

     lseek求偏移量  第三个参数是指针null lseek的第二个参数是打开的位置 seekend的指针位置+0

  17. 新注释方式更好

     

  18. 发送前三部分响应头

     C语言拼接字符串是sprintf 

  19. 如何知道文件类型

     一个机智的小涵书,从右往左找

  20. 如何返回错误信息·

     后面的不用执行

  21. 如何返回文件内容

     stat系统函数获取文件属性 索引节点

  22. 学习资源

     

  23. 发送客户端目录

     拼接字符串 ST里的长度以免文件大小过长都是长整形

  24. 如何添加目录跳转

     加转义字符 如果是目录就跳转到子目录,所以必须加斜杠,如果是文件就不需要

  25. 为何会出不显示的bug sendfile号称勿复制

     

     lsee 会把文件描述符的指针也在执行过程中移动,现在就是移动到末尾了,解决办法就是移动到头就行了。st.size  根据sendfile返回的值判断什么错误 如果是-1就是发生错误,如果是0说明0字节

  26. 为什么还要有发送错误  通信文件描述符和监听发送文件描述符异步

     cfd非阻塞 一直在循环里面读取发送 这时候fd还没有在内核里面的缓冲区写进去

     offset 偏移量可以自己修改

  27. 如何将字符转换过来  自己下载或者写一下具体的函数 原理在于整形和字符型的类型转换

     

     

  28. 多线程 监听线程只有一个 连接建立可以多线程 通信可以多线程

     pthreadcreate创建有四个参数 分别是传出参数 就是创建的子线程的线程ID ,第二个参数null就可以,第三个创建的任务回调函数地址,第四个 函数参数只有一个就是结构体指针,封装好参数,线程ID也可以封装进里面,然后创建的时候传出就可以了

posted @ 2023-10-04 17:53  SunShine789  阅读(29)  评论(0)    收藏  举报