当前位置: 首页 > wzjs >正文

郑州专业做微信网站京东网上购物

郑州专业做微信网站,京东网上购物,广州网站百度排名推广,黑马程序员线上课程多少钱Linux网络编程是在Linux操作系统环境下进行的网络相关程序开发,主要用于实现不同计算机之间的数据通信和资源共享。以下从基础知识、网络编程模型、常用函数和编程步骤等方面进行详细介绍: 基础知识 1. 网络协议 TCP/IP协议族:是互联网通信…

Linux网络编程是在Linux操作系统环境下进行的网络相关程序开发,主要用于实现不同计算机之间的数据通信和资源共享。以下从基础知识、网络编程模型、常用函数和编程步骤等方面进行详细介绍:

基础知识

1. 网络协议

  • TCP/IP协议族:是互联网通信的基础协议,包括多个层次的协议。例如,IP协议负责网络层的数据包传输,TCP和UDP协议则工作在传输层。

    • TCP(传输控制协议):提供面向连接、可靠的、基于字节流的传输服务。在进行数据传输前需要建立连接,传输完成后需要断开连接,适合对数据准确性要求较高的场景,如文件传输、网页浏览等。

    • UDP(用户数据报协议):提供无连接、不可靠的传输服务。不需要建立连接,数据以数据报的形式发送,适合对实时性要求较高、对数据准确性要求相对较低的场景,如视频会议、实时游戏等。

2. 网络地址

  • IP地址:用于唯一标识网络中的设备,分为IPv4和IPv6两种。IPv4地址由32位二进制数组成,通常表示为点分十进制形式,如192.168.1.1;IPv6地址由128位二进制数组成,采用冒号分隔的十六进制表示。

  • 端口号:用于区分同一设备上不同的网络应用程序,范围从0到65535。其中,0 - 1023为系统保留端口,通常由系统服务使用,如HTTP服务默认使用80端口,HTTPS服务默认使用443端口。

网络编程模型

1. 客户端 - 服务器模型

  • 这是最常见的网络编程模型,由客户端和服务器两部分组成。服务器监听特定的端口,等待客户端的连接请求;客户端主动发起连接请求,与服务器建立连接后进行数据交互。

2. 多进程/多线程模型

  • 多进程模型:服务器为每个客户端连接创建一个新的进程来处理,各个进程之间相互独立,一个进程的崩溃不会影响其他进程。但创建和销毁进程的开销较大,会消耗较多的系统资源。

  • 多线程模型:服务器为每个客户端连接创建一个新的线程来处理,线程共享进程的资源,创建和销毁线程的开销相对较小。但线程之间的同步和互斥问题需要处理,否则可能会出现数据不一致的情况。

3. I/O多路复用模型

  • 使用selectpollepoll等函数,让一个进程可以同时监听多个文件描述符(包括网络套接字)的读写事件,当某个文件描述符有事件发生时,通知进程进行相应的处理。这种模型可以提高服务器的并发处理能力,减少系统资源的消耗。

常用函数

1. 套接字相关函数

  • socket():用于创建一个套接字,返回一个文件描述符。例如:

#include <sys/socket.h>
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

其中,AF_INET表示使用IPv4地址族,SOCK_STREAM表示使用TCP协议。

  • bind():将套接字与指定的IP地址和端口号绑定。例如:

#include <arpa/inet.h>
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(8888);
bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
  • listen():将套接字设置为监听状态,等待客户端的连接请求。例如:

listen(sockfd, 5);

其中,5表示允许的最大连接请求队列长度。

  • accept():接受客户端的连接请求,返回一个新的套接字描述符用于与客户端进行通信。例如:

struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int connfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_addr_len);
  • connect():客户端使用该函数向服务器发起连接请求。例如:

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(8888);
connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));

2. 数据读写函数

  • send()/recv():用于TCP套接字的数据发送和接收。例如:

// 发送数据
char *msg = "Hello, server!";
send(sockfd, msg, strlen(msg), 0);// 接收数据
char buffer[1024];
int n = recv(sockfd, buffer, sizeof(buffer), 0);
  • sendto()/recvfrom():用于UDP套接字的数据发送和接收,需要指定目标地址。例如:

// 发送数据
struct sockaddr_in server_addr;
// 初始化server_addr
sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));// 接收数据
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_addr_len);

编程步骤

1. 服务器端编程步骤

  1. 创建套接字(socket())。

  2. 绑定套接字到指定的IP地址和端口号(bind())。

  3. 将套接字设置为监听状态(listen())。

  4. 接受客户端的连接请求(accept())。

  5. 与客户端进行数据交互(send()/recv())。

  6. 关闭套接字(close())。

2. 客户端编程步骤

  1. 创建套接字(socket())。

  2. 向服务器发起连接请求(connect())。

  3. 与服务器进行数据交互(send()/recv())。

  4. 关闭套接字(close())。

示例代码

以下是一个简单的TCP服务器和客户端示例代码:

服务器端代码(server.c)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 8888int main() {int sockfd, connfd;struct sockaddr_in server_addr, client_addr;socklen_t client_addr_len = sizeof(client_addr);char buffer[1024];// 创建套接字sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd == -1) {perror("socket creation failed");exit(EXIT_FAILURE);}// 初始化服务器地址结构memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = INADDR_ANY;server_addr.sin_port = htons(PORT);// 绑定套接字if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {perror("bind failed");exit(EXIT_FAILURE);}// 监听套接字if (listen(sockfd, 5) == -1) {perror("listen failed");exit(EXIT_FAILURE);}printf("Server listening on port %d...\n", PORT);// 接受客户端连接connfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_addr_len);if (connfd == -1) {perror("accept failed");exit(EXIT_FAILURE);}printf("Client connected.\n");// 接收客户端数据int n = recv(connfd, buffer, sizeof(buffer), 0);if (n == -1) {perror("recv failed");exit(EXIT_FAILURE);}buffer[n] = '\0';printf("Received from client: %s\n", buffer);// 发送响应数据char *msg = "Hello, client!";send(connfd, msg, strlen(msg), 0);// 关闭套接字close(connfd);close(sockfd);return 0;
}

客户端代码(client.c)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>#define SERVER_IP "127.0.0.1"
#define PORT 8888int main() {int sockfd;struct sockaddr_in server_addr;char buffer[1024];// 创建套接字sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd == -1) {perror("socket creation failed");exit(EXIT_FAILURE);}// 初始化服务器地址结构memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);server_addr.sin_port = htons(PORT);// 连接服务器if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {perror("connect failed");exit(EXIT_FAILURE);}printf("Connected to server.\n");// 发送数据char *msg = "Hello, server!";send(sockfd, msg, strlen(msg), 0);// 接收服务器响应int n = recv(sockfd, buffer, sizeof(buffer), 0);if (n == -1) {perror("recv failed");exit(EXIT_FAILURE);}buffer[n] = '\0';printf("Received from server: %s\n", buffer);// 关闭套接字close(sockfd);return 0;
}
http://www.dtcms.com/wzjs/829805.html

相关文章:

  • 农村网站建设茂名企业内部系统网站制作
  • 黄村做网站建设什么网页传奇好玩
  • 门户网站点评网页设计作业
  • 电脑打不开建设银行网站建站公司的服务内容
  • 重庆江津网站建设一点优化
  • wordpress手机站如何做宁波市做网站
  • 泉州建设培训中心网站软件技术前端开发
  • 河间网站制作公司企查查官网登录
  • 企业网站建设义乌包含导航栏至少包含三个布局
  • 新乡正规网站建设哪家便宜河南网站建设报价
  • 昆明企业网站排名公司电子外贸网站模板
  • wordpress 建立第二个网站建网站商城有哪些公司
  • 邢台网站建设网络公司建设厅证件查询方式
  • 做网站要求什么大连旅游网站建设
  • 成都网站维护多少钱四库一平台查询入口
  • 网站的详情页面设计企业网站建设进度
  • 网站运营心得中国建设银行手机银行下载
  • 沈阳企业定制网站建设企业vi包括哪些内容
  • 吉林网站模板桂林微物网络科技有限公司
  • 大连网络营销网站做电影下载网站
  • 1元涨1000粉丝网站百度推广开户流程
  • 手机怎么防止网站自动跳转网站建设的主要工作有哪些
  • 郑州网站关键词优化公司哪家好做网站php
  • 利用软件做许多网站违法吗联谊会建设网站
  • wordpress站群搭建网站建设合作合同范文
  • 兰州网站设计有限公司哈尔滨seo
  • 济源建设网站的公司搜索引擎营销的特征
  • 网站健设推广产品多少钱营销型网站跟云网站
  • 网站建设的基本过程做甜品网站栏目
  • jsp网站开发职位要求wordpress文件管理插件