1. 建立连接
    1.1 socket (非常类似于open函数,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之后我们操作这个网络连接都通过这个网络文件描述符)
    1.2 bind 绑定的意思;好比是ioctl
    1.3 listen 监听
    1.4 connect 连接 (客户端)

  2. 发送和接收
    2.1 send 和 write
    2.2 recv 和 read

  3. 辅助性函数
    3.1 inet_aton (字符转为32位二进制)
    inet_addr (字符转为32位二进制)
    inet_ntoa (32位二进制转位字符)
    3.2 inet_ntop (32位二进制转位字符)
    inet_pton (字符转为32位二进制)
    这两个是IPv4 和 IPv6均可以使用的。

  4. 表示IP地址相关数据结构
    4.1 都定义在netinet/in.h中(也可以到ubuntu中查看vi /usr/include/netinet/in.h)
    4.2 struct sockaddr 这个结构体是网络编程接口中用来表示一个IP地址的,注意这个IP地址是不区分IPv4和IPv6的(或者说兼容IPv4和IPv6的)typedef uint32_t in_addr_t 网络内部用来表示IP地址的类型。
    4.3
    struct in_addr
    {
    in_addr_t s_addr;
    };
    4.4
    struct sockaddr_in
    {
    _SOCKADDR_COMMON (sin);
    in_port_t sin_port; /* Port number. /
    struct in_addr sin_addr; /
    Internet address. /
    /
    Pad to size of `struct sockaddr’. */
    unsigned char sin_zero[sizeof (struct sockaddr) -
    __SOCKADDR_COMMON_SIZE -
    sizeof (in_port_t) -
    sizeof (struct in_addr)];
    }
    4.5 struct sockaddr 这个结构是linux的网络编程接口中用来表示IP地址的标准结构体,bind connect等函数中都需要这个结构体,这个结构体是兼容IPv4和IPv6的,在实际编程中这个结构会被一个struct sockaddr_in 或者一个struct sockaddr_in6 (IPv)所填充。

参考朱老师物联网大课堂

socket编程实践相关推荐

  1. Socket编程实践(10) --select的限制与poll的使用

    select的限制 用select实现的并发服务器,能达到的并发数一般受两方面限制: 1)一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n(number)来调整或 ...

  2. Socket编程实践(6) --TCP服务端注意事项

    僵尸进程处理 1)通过忽略SIGCHLD信号,避免僵尸进程 在server端代码中添加 signal(SIGCHLD, SIG_IGN); 2)通过wait/waitpid方法,解决僵尸进程 sign ...

  3. C# socket编程实践——支持广播的简单socket服务器

    在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...

  4. Socket编程实践(12) --UDP编程基础

    UDP特点 无连接,面向数据报(基于消息,不会粘包)的数据传输服务; 不可靠(可能会丢包, 乱序, 重复), 但因此一般情况下UDP更加高效; UDP客户/服务器模型 UDP-API使用 #inclu ...

  5. Socket编程实践(2) --Socket编程导引

    什么是Socket? Socket可以看成是用户进程与内核网络协议栈的接口(编程接口, 如下图所示), 其不仅可以用于本机进程间通信,可以用于网络上不同主机的进程间通信, 甚至还可以用于异构系统之间的 ...

  6. Socket编程实践(11) --epoll原理与封装

    常用模型的特点 Linux 下设计并发网络程序,有典型的Apache模型(Process Per Connection,PPC), TPC(Thread Per Connection)模型,以及 se ...

  7. Socket编程实践(13) --UNIX域协议

    UNIX域协议 UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和应答 ...

  8. Socket编程实践(5) --TCP粘包问题与解决

    TCP粘包问题 由于TCP协议是基于字节流且无边界的传输协议, 因此很有可能产生粘包问题, 问题描述如下 对于Host A 发送的M1与M2两个各10K的数据块, Host B 接收数据的方式不确定, ...

  9. Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程

    SO_REUSEADDR选项 在上一篇文章的最后我们贴出了一个简单的C/S通信的例程.在该例程序中,使用"Ctrl+c"结束通信后,服务器是无法立即重启的,如果尝试重启服务器,将被 ...

最新文章

  1. python扫描器_7.python实现高效端口扫描器之nmap模块
  2. DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现
  3. 基于颜色特征的图像匹配MATLAB,基于颜色特征的图像检索系统 这是个MATLAB程序 - 下载 - 搜珍网...
  4. Github标星2w+,热榜第一,如何用Python实现所有算法
  5. 利用jsonp实现跨域登陆
  6. 小型微型计算机系统退回修改,小型微型计算机系统
  7. 【什么值得买】最牛逼的语音识别公司开始做硬件了
  8. 3D视频的质量评价报告 (MSU出品)
  9. 【小窍门tip】oracle sequence 修改增量值
  10. 第34届越秀区青少年科技创新大赛_创客集结号上报名已开始啦
  11. bootdo框架首页解析
  12. 查阅国外文献的网站有哪些?
  13. linux双击启动脚本文件
  14. java gui 文本框_【Java GUI】文本框和文本区
  15. freeMarker(十)——模板语言之内建函数
  16. 模型剪枝,“剪”掉了什么?
  17. 星敏感器 matlab,星敏感器姿态确定仿真综合实验.docx
  18. 如何把pdf转换成excel呢?教你简单的方法
  19. 项目需求分析和项目可行性
  20. Android SAF(Storage Access Framework)使用攻略

热门文章

  1. 辞职读博:研究AI设计怪物,从《游戏王》卡牌开始
  2. 两位院士同时受聘,山东大学再添强援
  3. 深度学习环境配置指南:Pytorch、TensorFlow、Keras
  4. ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
  5. NLP到底有多难?我们笑了,NLP 却忍不住哭了!
  6. PS2019画笔工具、铅笔工具、颜色替换工具
  7. ​​​​​​​跳水板
  8. python之互斥锁
  9. Redis数据库搭建集群(集群概念、redis集群、搭建集群(配置机器1、2、创建集群、数据操作验证)、Python与redis集群交互)
  10. 深度学习 | 三个概念:Epoch, Batch, Iteration