socket编程实践
建立连接
1.1 socket (非常类似于open函数,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之后我们操作这个网络连接都通过这个网络文件描述符)
1.2 bind 绑定的意思;好比是ioctl
1.3 listen 监听
1.4 connect 连接 (客户端)发送和接收
2.1 send 和 write
2.2 recv 和 read辅助性函数
3.1 inet_aton (字符转为32位二进制)
inet_addr (字符转为32位二进制)
inet_ntoa (32位二进制转位字符)
3.2 inet_ntop (32位二进制转位字符)
inet_pton (字符转为32位二进制)
这两个是IPv4 和 IPv6均可以使用的。表示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编程实践相关推荐
- Socket编程实践(10) --select的限制与poll的使用
select的限制 用select实现的并发服务器,能达到的并发数一般受两方面限制: 1)一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n(number)来调整或 ...
- Socket编程实践(6) --TCP服务端注意事项
僵尸进程处理 1)通过忽略SIGCHLD信号,避免僵尸进程 在server端代码中添加 signal(SIGCHLD, SIG_IGN); 2)通过wait/waitpid方法,解决僵尸进程 sign ...
- C# socket编程实践——支持广播的简单socket服务器
在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...
- Socket编程实践(12) --UDP编程基础
UDP特点 无连接,面向数据报(基于消息,不会粘包)的数据传输服务; 不可靠(可能会丢包, 乱序, 重复), 但因此一般情况下UDP更加高效; UDP客户/服务器模型 UDP-API使用 #inclu ...
- Socket编程实践(2) --Socket编程导引
什么是Socket? Socket可以看成是用户进程与内核网络协议栈的接口(编程接口, 如下图所示), 其不仅可以用于本机进程间通信,可以用于网络上不同主机的进程间通信, 甚至还可以用于异构系统之间的 ...
- Socket编程实践(11) --epoll原理与封装
常用模型的特点 Linux 下设计并发网络程序,有典型的Apache模型(Process Per Connection,PPC), TPC(Thread Per Connection)模型,以及 se ...
- Socket编程实践(13) --UNIX域协议
UNIX域协议 UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和应答 ...
- Socket编程实践(5) --TCP粘包问题与解决
TCP粘包问题 由于TCP协议是基于字节流且无边界的传输协议, 因此很有可能产生粘包问题, 问题描述如下 对于Host A 发送的M1与M2两个各10K的数据块, Host B 接收数据的方式不确定, ...
- Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程
SO_REUSEADDR选项 在上一篇文章的最后我们贴出了一个简单的C/S通信的例程.在该例程序中,使用"Ctrl+c"结束通信后,服务器是无法立即重启的,如果尝试重启服务器,将被 ...
最新文章
- python扫描器_7.python实现高效端口扫描器之nmap模块
- DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现
- 基于颜色特征的图像匹配MATLAB,基于颜色特征的图像检索系统 这是个MATLAB程序 - 下载 - 搜珍网...
- Github标星2w+,热榜第一,如何用Python实现所有算法
- 利用jsonp实现跨域登陆
- 小型微型计算机系统退回修改,小型微型计算机系统
- 【什么值得买】最牛逼的语音识别公司开始做硬件了
- 3D视频的质量评价报告 (MSU出品)
- 【小窍门tip】oracle sequence 修改增量值
- 第34届越秀区青少年科技创新大赛_创客集结号上报名已开始啦
- bootdo框架首页解析
- 查阅国外文献的网站有哪些?
- linux双击启动脚本文件
- java gui 文本框_【Java GUI】文本框和文本区
- freeMarker(十)——模板语言之内建函数
- 模型剪枝,“剪”掉了什么?
- 星敏感器 matlab,星敏感器姿态确定仿真综合实验.docx
- 如何把pdf转换成excel呢?教你简单的方法
- 项目需求分析和项目可行性
- Android SAF(Storage Access Framework)使用攻略
热门文章
- 辞职读博:研究AI设计怪物,从《游戏王》卡牌开始
- 两位院士同时受聘,山东大学再添强援
- 深度学习环境配置指南:Pytorch、TensorFlow、Keras
- ECCV2020 Spotlight | CPN:Anchor Free,Two-stage目标检测
- NLP到底有多难?我们笑了,NLP 却忍不住哭了!
- PS2019画笔工具、铅笔工具、颜色替换工具
- ​​​​​​​跳水板
- python之互斥锁
- Redis数据库搭建集群(集群概念、redis集群、搭建集群(配置机器1、2、创建集群、数据操作验证)、Python与redis集群交互)
- 深度学习 | 三个概念:Epoch, Batch, Iteration