网络编程概述
进程间通信:管道、消息队列、共享内存、信号、信号量
进程间通信的特点:依赖于Linux内核
进程间通信的缺陷:无法多机通信
网络编程的地址构成:IP地址+端口号
网络编程数据交流:协议(数据格式)(http、tcp、udp)
单片机协议:串口协议
本处网络编程:socket套接字网络编程,用得最多的是tcp和udp:tcp(面向连接、可靠、要求精度高)、udp(面向报文、不可靠、适合数据量大,精度要求不高,内存响应快)
Linux应用层端口号一般选择5000-10000
字节序
小端字节序/大端字节序
小端字节序:低字节序放在低地址
socket编程步骤
Linux提供的API简析
int socket(int domain,int type,int protocol)
int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
socklen_t addrlen:地址长度
地址转换API
int listen(int sockfd,int backlog)
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)
数据收发
数据收发常用的第二套API
客户端的connect函数
socket服务端代码实现
整体流程:socket→bind→listen→accept→read→write
socket客户端代码实现
整体流程:socket→connect→send→read
实现双方聊天
c语言中argc和argv[ ]的作用及用法:(65条消息) c语言中argc和argv[ ]的作用及用法_Black_黑色的博客-CSDN博客
多方消息收发
需要解决资源竞争问题,使用子进程fork不能解决问题
fork:一个子进程负责一个连接通道
sprintf()的使用:C 库函数 – sprintf() | 菜鸟教程 (runoob.com)
项目运行结果
ip地址位填入127.0.0.1,则会自动获取本机的ip地址
项目研发思路
每个版本迭代更新一项新功能,方便代码进行调试,不要一次性写大量的代码
封装get函数功能:1、判断文件是否存在;2、打开文件;3、读取文件;4、将读取到的文件信息发送到指定位置
封装pwd函数功能:1、popen;2、fread;3、send