当前位置 主页 > 技术大全 >

    Linux网络编程深度笔记精华
    linux网络编程超级详细笔记

    栏目:技术大全 时间:2024-12-07 03:08



    Linux网络编程超级详细笔记:构建高效网络应用的基石 在当今数字化时代,网络编程已成为软件开发中不可或缺的一部分

        作为开发者,掌握Linux网络编程不仅能够让我们创建出高效、稳定的网络应用,还能够深入理解底层通信机制,提升整体技术水平

        本文基于“Linux网络编程超级详细笔记”,旨在为读者提供一份全面、深入的Linux网络编程指南,帮助大家在网络编程的道路上越走越远

         一、Linux网络编程基础 1. 网络编程概述 网络编程,简而言之,就是通过网络实现不同计算机之间的数据传输和通信

        在Linux环境下,网络编程通常依赖于套接字(Socket)来实现

        套接字是一个端点,它提供了不同主机之间或同一主机上不同进程之间数据通信的接口

         2. IP地址与端口号 IP地址用于唯一标识网络中的设备,而端口号则用于标识设备上的特定服务

        在Linux网络编程中,我们通常会使用IP地址和端口号来指定通信的双方

         3. 协议栈与分层模型 Linux网络编程遵循OSI七层模型或TCP/IP四层模型

        这些模型将网络通信划分为不同的层次,每一层都负责特定的功能

        在Linux中,网络协议栈实现了这些层次的功能,为我们提供了网络通信的基础

         二、套接字编程基础 1. 套接字类型 在Linux中,套接字主要分为三种类型:流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)

        流式套接字主要用于TCP连接,提供可靠的数据传输;数据报套接字主要用于UDP连接,提供无连接的数据传输;原始套接字则允许我们直接操作底层网络协议

         2. 套接字函数 socket():创建一个新的套接字

         - bind():将套接字绑定到一个特定的IP地址和端口号上

         - listen():使套接字处于监听状态,准备接受连接请求

         - accept():接受一个连接请求,并返回一个新的套接字用于与客户端通信

         connect():主动连接到服务器套接字

         - send() 和 recv():用于发送和接收数据

         close():关闭套接字

         3. 示例代码 下面是一个简单的TCP服务器和客户端示例代码: TCP服务器: include include include include include int main() { intserver_fd,new_socket; structsockaddr_in address; int addrlen = sizeof(address); charbuffer【1024】 ={0}; constchar hello = Hello from server; // 创建套接字 if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == { perror(socketfailed); exit(EXIT_FAILURE); } // 绑定套接字到地址和端口 address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(8080); if(bind(server_fd, (struct sockaddr)&address, sizeof(address)) < 0) { perror(bindfailed); close(server_fd); exit(EXIT_FAILURE); } // 监听连接 if(listen(server_fd, < { perror(listen); close(server_fd); exit(EXIT_FAILURE); } // 接受连接 if((new_socket = accept(server_fd, (struct sockaddr)&address, (socklen_t)&addrlen)) < { perror(accept); close(server_fd); exit(EXIT_FAILURE); } // 读取数据 read(new_socket, buffer, 1024); printf(Message from client: %sn,buffer); // 发送数据 send(new_socket, hello, strlen(hello),0); printf(Hello message sent ); // 关闭套接字 close(new_socket); close(server_fd); return 0; } TCP客户端: include include include include include int main() { int sock = 0; structsockaddr_in serv_addr; charbuffer【1024】 ={0}; constchar hello = Hello from client; // 创建套接字 if((sock = socket(AF_INET, SOCK_STREAM, 0)) < { printf( Socket creation error n); return -1; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(8080); // 将IP地址从字符串转换为二进制形式 if(inet_pton(AF_INET, 127.0.0.1, &serv_addr.sin_addr) <= 0) { printf( Invalid address/ Address not supported ); return -1; } // 连接服务器 if(connect(sock, (struct sockaddr)&serv_addr, sizeof(serv_addr)) < 0) { printf( Connection Failed ); return -1; } // 发送数据 send(sock, hello, strlen(hello),0); printf(Hello message sent ); // 读取数据 read(sock, buffer, 1024); printf(Message from server: %sn,buffer); // 关闭套接字 close(sock); return 0; } 三、高级网络编程技术 1. 多线程与多进程 在处理多个客户端连接时,我们可以使用多线程或多进程技术

        多线程编程允许我们在单个进程中运行多个线程,从而提高了程序的并发性能

        而多进程编程则通过创建多个进程来实现并发处理

         2. 非阻塞与异步I/O 在Linux网络编程中,非阻塞I/O和异步I/O是提高程序性能的重要手段

        非阻塞I/O允许我