嵌入式,Linux网络编程

简介: linux网络编程通过套接字(socket)实现,socket是一种文件描述符 socket三种类型:流式套接字SOCK_STREAM,提供可靠的、面向连接的通讯流,使用TCP协议,保证通信可靠性和顺序性                         ...

linux网络编程通过套接字(socket)实现,socket是一种文件描述符

socket三种类型:流式套接字SOCK_STREAM,提供可靠的、面向连接的通讯流,使用TCP协议,保证通信可靠性和顺序性

                            数据报套接字SOCK_DGRAM,定义一种无连接服务,数据通过独立报文传输,无序,不保证可靠, 使用UDP

                            原始套接字SOCK_RAW使用IP协议,用于新型的网络测试

网络地址:struct  sockaddr{

                            u_short  sa_family; 协议族

                            char  sa_data[14];  协议地址 

                                    }

                  struct  sockaddr_in{

                             short  int  sin_family;                          协议族

                             unsigned  short int  sin_port;             端口号

                             struct  int_addr   sin_addr;                 协议地址

                             unsigned  char  sin_zero[8];               填0                 

                                  }

                  typedef  struct in_addr{

                                union{

                                         struct{

                                                  unsigned  char  s_b1;

                                                  s_b2;

                                                  s_b3;

                                                  s_b4;

                                                  }S_un_b;

                                        struct{

                                                  unsigned  short  s_w1;

                                                  s_w2;

                                                 }S_un_w;

                                        unsigned  long  S_addr;

                                         }S_un;

                                  }IN_ADDR;

地址转换:IP通常是192.168.1.1形式,而struct  in_addr的IP 地址由32位整数表示

                  int  inet_aton(const char  *cp,struct  in_addr  *inp)  将a.b.c.d形式转换为32位形式,存储在inp

                  char *inrt_ntoa(struct  in_addr in)  将32位地址转换为啊,a.b.c.d

字节顺序转换:不同类型的cpu对变量的字节存储方式不一样,有的高位前低位后,有的低位前高位后。而网络字节顺序统一为高位前

                        htons   把unsigned  short类型从主机序转换为网络序

                        htonl    把unsigned  long类型从主机序转换为网络序

                        ntohs   把unsigned  short类型从网络序转为主机序

                        ntohl   把unsigned  longt类型从网络序转为主机序

网络上标识一台主机可以用IP地址,或者主机名

              struct  hostent  *gethostbyname(const char *hostname){

                        char *h_name;                  主机正式名       

                        char *h_aliases;             主机别名

                        int  h_addrtype;              主机地址类型

                        int  h_length;                  地址长度

                        char **h_addr_list ;         IP地址列表

                                    };

             #define  h_addr  h_addr_list[0]


UDP网络程序设计

UDP服务器:创建一个socket,用函数socket()

                     绑定IP地址、端口号等信息到socket,用函数bind()

                     循环接收数据,用函数recvfrom()

                     关闭网络链接

UDP客户端:创建一个socket,用函数socket()

                     绑定IP地址、端口号等信息到socket,用函数bind()

                     设置对方IP地址和端口号等信息

                     发送数据,sendto()

                     关闭网络链接


TCP网络程序设计

TCP服务器:创建一个socket,用函数socket()

                     绑定IP地址、端口号等信息到socket,用函数bind()

                     设置允许的最大链接数,listen()

                     等待来自客户端的链接请求,accept()

                     收发数据,用函数send和recv(),或者read()和write()

                     关闭网络链接

TCP客户端:创建一个socket,用函数socket()

                     设置要链接服务器的IP地址和端口号等信息

                     链接服务器,connect()

                     收发数据,用函数send和recv(),或者read()和write()

                     关闭网络链接


相关文章
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
839 18
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
354 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
1205 113
|
网络协议 关系型数据库 Linux
【App Service Linux】在Linux App Service中安装 tcpdump 并抓取网络包
在App Service for Linux环境中,无法像Windows一样直接使用网络排查工具抓包。本文介绍了如何通过TCPDUMP在Linux环境下抓取网络包,包括SSH进入容器、安装tcpdump、执行抓包命令及下载分析文件的完整操作步骤。
627 5
|
Web App开发 网络协议 Linux
【Linux】网络基础
TCP/IP五层模型是网络通信的基础框架,将复杂的数据传输过程分为物理层、数据链路层、网络层、传输层和应用层,每层各司其职,协同完成远程通信。该模型确保了不同设备和网络之间的互联互通,是现代互联网运行的核心机制。
1519 5
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
584 19
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
1401 12
|
网络协议 Linux 开发者
深入Linux中UDP网络通信机制编程探索
以上步骤概述了Linux中UDP网络通信的编程机制。在实现时,因关注细节和上下文环境可能有所调整,但大致流程是一致的。这些知识片段旨在帮助开发者快速上手Linux下的UDP编程,并提供可靠的信息作为编程的基础。在编程实践中,应结合实际业务需求,设计合适的数据传输协议,确保数据的正确性和实时性。
325 0
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
2598 20
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
818 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估