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

网站类型分类有哪些百度新闻搜索

网站类型分类有哪些,百度新闻搜索,网站设计的优点和缺点,小企业网站源码一、引言 在网络编程的领域中,TCP(Transmission Control Protocol)协议因其可靠的数据传输特性而被广泛应用。在 Linux 环境下,使用 C 或 C 进行 TCP 编程可以实现各种强大的网络应用。本文将深入探讨 Linux TCP 编程的各个方面&…

一、引言

在网络编程的领域中,TCP(Transmission Control Protocol)协议因其可靠的数据传输特性而被广泛应用。在 Linux 环境下,使用 C 或 C++ 进行 TCP 编程可以实现各种强大的网络应用。本文将深入探讨 Linux TCP 编程的各个方面,包括 API 接口的详细说明、TCP Server 和 TCP Client 的实例代码,以及完整的测试流程。

二、TCP 编程的 API 接口说明

(一)socket() 函数

int socket(int domain, int type, int protocol);
  • 功能:创建一个套接字。
  • 参数:
    • domain:指定协议族,常见的有 AF_INET(IPv4 网络协议)和 AF_INET6(IPv6 网络协议)。
    • type:套接字类型,对于 TCP 通常使用 SOCK_STREAM
    • protocol:指定使用的具体协议,通常设置为 0 以使用默认的 TCP 协议。
  • 返回值:成功时返回一个非负的套接字描述符,失败时返回 -1。

(二)bind() 函数

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 功能:将套接字与本地地址和端口绑定。
  • 参数:
    • sockfd:由 socket() 函数返回的套接字描述符。
    • addr:指向包含地址和端口信息的结构体,如 struct sockaddr_in(IPv4)或 struct sockaddr_in6(IPv6)。
    • addrlenaddr 结构体的长度。
  • 返回值:成功返回 0,失败返回 -1。

(三)listen() 函数

int listen(int sockfd, int backlog);
  • 功能:将套接字设置为监听状态,准备接受客户端的连接请求。
  • 参数:
    • sockfd:已绑定的套接字描述符。
    • backlog:指定等待连接队列的最大长度。
  • 返回值:成功返回 0,失败返回 -1。

(四)accept() 函数

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  • 功能:从已完成连接队列中取出一个连接,并创建一个新的套接字与客户端进行通信。
  • 参数:
    • sockfd:监听套接字描述符。
    • addr:用于存储客户端的地址信息。
    • addrlen:用于指定 addr 结构体的长度。
  • 返回值:成功返回一个新的套接字描述符用于与客户端通信,失败返回 -1。

(五)connect() 函数(客户端使用)

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 功能:客户端向服务器发起连接请求。
  • 参数:
    • sockfd:套接字描述符。
    • addr:指向服务器的地址结构体。
    • addrlenaddr 结构体的长度。
  • 返回值:成功返回 0,失败返回 -1。

(六)send()recv() 函数

send() 函数
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 功能:用于发送数据。
  • 参数:
    • sockfd:套接字描述符。
    • buf:指向要发送数据的缓冲区。
    • len:要发送的数据长度。
    • flags:控制选项,通常设置为 0。
  • 返回值:成功返回实际发送的字节数,失败返回 -1。
recv() 函数
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • 功能:用于接收数据。
  • 参数:
    • sockfd:套接字描述符。
    • buf:用于存储接收数据的缓冲区。
    • len:缓冲区的长度。
    • flags:控制选项,通常设置为 0。
  • 返回值:成功返回实际接收的字节数,失败返回 -1。

(七)close() 函数

int close(int fd);
  • 功能:关闭套接字。
  • 参数:要关闭的套接字描述符。

三、TCP Server 实例代码(支持多线程和回显)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>#define MAX_CONNECTIONS 10  // 最大连接数量pthread_mutex_t connectionCountMutex;
int connectionCount = 0;  // 记录当前连接数void *handle_client(void *arg) {int client_fd = *((int *)arg);char buffer[1024];int bytes_read;while ((bytes_read = recv(client_fd, buffer, sizeof(buffer), 0)) > 0) {// 回显接收到的数据send(client_fd, buffer, bytes_read, 0);}// 处理客户端断开连接pthread_mutex_lock(&connectionCountMutex);connectionCount--;printf("Client disconnected. Current connections: %d\n", connectionCount);pthread_mutex_unlock(&connectionCountMutex);close(client_fd);pthread_exit(NULL);
}int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);int port = 8080;  // 服务器监听的端口// 创建套接字if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}// 初始化地址结构体address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(port);// 绑定套接字到本地地址和端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("Bind failed");exit(EXIT_FAILURE);}// 开始监听if (listen(server_fd, MAX_CONNECTIONS) < 0) {perror("Listen failed");exit(EXIT_FAILURE);}printf("Server is listening on port %d...\n", port);pthread_mutex_init(&connectionCountMutex, NULL);while (1) {// 接受客户端连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0) {perror("Accept failed");exit(EXIT_FAILURE);}printf("New connection accepted. Current connections: %d\n", ++connectionCount);// 检查连接数是否达到上限if (connectionCount > MAX_CONNECTIONS) {printf("Reached maximum connections. Closing new connection.\n");close(new_socket);connectionCount--;continue;}pthread_t thread;if (pthread_create(&thread, NULL, handle_client, &new_socket)!= 0) {perror("Thread creation failed");close(new_socket);connectionCount--;continue;}// 分离线程,使其资源在结束时自动回收pthread_detach(thread);}// 清理pthread_mutex_destroy(&connectionCountMutex);// 关闭服务器套接字close(server_fd);return 0;
}

四、TCP Client 实例代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int main(int argc, char *argv[]) {if (argc!= 3) {printf("Usage: %s <server_ip> <port>\n", argv[0]);return 1;}int sock = 0;struct sockaddr_in serv_addr;char buffer[1024] = {0};int port = atoi(argv[2]);  // 将命令行参数转换为端口号char *server_ip = argv[1];  // 服务器 IP 地址// 创建套接字if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {printf("\n Socket creation error \n");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(port);// 将服务器 IP 地址从字符串转换为网络地址格式if (inet_pton(AF_INET, server_ip, &serv_addr.sin_addr) <= 0) {printf("\nInvalid address/ Address not supported \n");return -1;}// 连接到服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {printf("\nConnection Failed \n");return -1;}printf("Connected to server\n");while (1) {printf("Enter message: ");fgets(buffer, sizeof(buffer), stdin);// 发送数据send(sock, buffer, strlen(buffer), 0);// 接收服务器响应int valread = recv(sock, buffer, 1024, 0);if (valread <= 0) {printf("Server disconnected\n");break;}printf("Received: %s", buffer);}// 关闭套接字close(sock);return 0;
}

五、测试验证

使用 GCC 编译器编译服务器程序:

gcc server.c -o server -lpthread
./server

同样使用 GCC 编译器编译客户端程序:

gcc client.c -o client
  1. 运行客户端程序,并传入服务器的 IP 地址和端口作为参数,例如:
./client 127.0.0.1 8080

在这里插入图片描述


文章转载自:
http://dural.spkw.cn
http://fusicoccin.spkw.cn
http://alai.spkw.cn
http://contamination.spkw.cn
http://couteau.spkw.cn
http://lms.spkw.cn
http://sansevieria.spkw.cn
http://labarum.spkw.cn
http://wolfberry.spkw.cn
http://toryism.spkw.cn
http://eoka.spkw.cn
http://cisterna.spkw.cn
http://presurmise.spkw.cn
http://pseudosalt.spkw.cn
http://gelatine.spkw.cn
http://eyed.spkw.cn
http://demarcative.spkw.cn
http://nummulated.spkw.cn
http://hyperkeratosis.spkw.cn
http://boggle.spkw.cn
http://illicit.spkw.cn
http://bucentaur.spkw.cn
http://cyc.spkw.cn
http://tuque.spkw.cn
http://hallstand.spkw.cn
http://pyelograph.spkw.cn
http://zirconic.spkw.cn
http://skeet.spkw.cn
http://biovular.spkw.cn
http://inexpungibility.spkw.cn
http://yesty.spkw.cn
http://cement.spkw.cn
http://seismotic.spkw.cn
http://autochrome.spkw.cn
http://lcp.spkw.cn
http://bundestag.spkw.cn
http://glean.spkw.cn
http://archdeaconship.spkw.cn
http://koto.spkw.cn
http://prefix.spkw.cn
http://archwise.spkw.cn
http://steel.spkw.cn
http://pinkie.spkw.cn
http://bajra.spkw.cn
http://flauntiness.spkw.cn
http://definiendum.spkw.cn
http://hairpin.spkw.cn
http://dprk.spkw.cn
http://kep.spkw.cn
http://climbing.spkw.cn
http://tshiluba.spkw.cn
http://roundly.spkw.cn
http://zn.spkw.cn
http://carifta.spkw.cn
http://fourflusher.spkw.cn
http://cockyolly.spkw.cn
http://rhodopsin.spkw.cn
http://zoonomy.spkw.cn
http://bromoform.spkw.cn
http://chamiso.spkw.cn
http://glowingly.spkw.cn
http://erica.spkw.cn
http://unseparated.spkw.cn
http://rosalie.spkw.cn
http://gumptious.spkw.cn
http://confirmable.spkw.cn
http://antenniform.spkw.cn
http://septennia.spkw.cn
http://plowtail.spkw.cn
http://diptych.spkw.cn
http://pleven.spkw.cn
http://knockwurst.spkw.cn
http://satiable.spkw.cn
http://defiance.spkw.cn
http://arigato.spkw.cn
http://genova.spkw.cn
http://chiefship.spkw.cn
http://heeler.spkw.cn
http://yesterevening.spkw.cn
http://edb.spkw.cn
http://shifting.spkw.cn
http://vomerine.spkw.cn
http://vinifera.spkw.cn
http://struthioid.spkw.cn
http://unpathed.spkw.cn
http://tatterdemalion.spkw.cn
http://pennsylvania.spkw.cn
http://euramerican.spkw.cn
http://repudiation.spkw.cn
http://schistose.spkw.cn
http://tristich.spkw.cn
http://downwash.spkw.cn
http://cyclase.spkw.cn
http://ankylosis.spkw.cn
http://lymphangioma.spkw.cn
http://sagaman.spkw.cn
http://frypan.spkw.cn
http://eventful.spkw.cn
http://riffler.spkw.cn
http://decidual.spkw.cn
http://www.15wanjia.com/news/96232.html

相关文章:

  • 网站建设资料填写全面网络推广营销策划
  • ps怎么做网站导航软件开发公司排行榜
  • 如何用国外网站做头条优化疫情防控 这些措施你应该知道
  • 在ps做网站分辨率96可以吗百度竞价开户多少钱
  • 公司网站建设包含的内容企业网站策划
  • 国外可以做会员网站的网站培训平台有哪些
  • 上海网站建设框架图厦门谷歌seo公司有哪些
  • 公厂做网站需要开诚信通吗沧州网站建设
  • 自己做的网站某些电脑打不开网页制作与网站建设实战教程
  • 二手车为什么做网站hs网站推广
  • 网站建设公司推广深圳英文站seo
  • 台州哪家做企业网站比较好seo工具下载
  • 360首页临沂seo
  • 苏州网站建设公司哪个好环球资源网站网址
  • 网站都有服务器吗沈阳seo
  • 做期货在哪个网站查资料网站seo查询工具
  • 免费建站团队宁波seo网络推广报价
  • 网店设计素材淘宝怎样优化关键词
  • 普洱网站建设优化网站建设的流程是什么
  • 西安网络公司大全搜索引擎优化实训
  • 河北网站建设模板百度搜索推广方案
  • 上海做网站的价格bt磁力搜索引擎
  • 小说网站建设多少钱物联网开发
  • java如何做网站的教程站点推广是什么意思
  • 网站pc端和手机端分离怎么做网站建设免费
  • 重庆网站seo服务淄博网站seo
  • 企业为什么做网站系统小程序开发平台官网
  • avada如何做中英文双语网站seo优化的方法
  • 转入已备案网站搜狗网址
  • 做地方门户网站seo搜索是什么意思