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

做视频有赚钱的网站医药公司网站设计

做视频有赚钱的网站,医药公司网站设计,赣州市城乡建设局官方网站,在线免费看1921完整版一、引言 在网络编程的领域中#xff0c;TCP#xff08;Transmission Control Protocol#xff09;协议因其可靠的数据传输特性而被广泛应用。在 Linux 环境下#xff0c;使用 C 或 C 进行 TCP 编程可以实现各种强大的网络应用。本文将深入探讨 Linux TCP 编程的各个方面TCPTransmission 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_INETIPv4 网络协议和 AF_INET6IPv6 网络协议。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_inIPv4或 struct sockaddr_in6IPv6。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.hint 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运行客户端程序并传入服务器的 IP 地址和端口作为参数例如 ./client 127.0.0.1 8080
http://www.pierceye.com/news/364680/

相关文章:

  • 云服务器如何安装网站爱站网seo综合查询
  • 个人建什么样的网站好wordpress添加用户登录
  • 中国教育网站官网做网站购买域名之后
  • 公司网站建设的优势新图闻的品牌建设经验
  • 网站建设是在商标哪个类别深圳宝安区新安街道
  • 网站推广服务器怎么选wordpress获取菜单链接地址
  • 横岗做网站外贸网站建设推广优化
  • 怎样搭建一个个人网站国金紫郡府淮北论坛
  • 网站建设类型wordpress词典模板
  • wordpress标签订阅插件优化网站视频
  • 聊城市建设工程质量监督站网站济南建站公司哪有
  • 郑州做网站便宜没有有知道钓鱼网站在哪儿做
  • 免费建自己域名的网站吗seo推广排名软件
  • 关于asp_sql网站开发的书籍专门做图片的网站cms
  • 淮安 网站建设:2003建网站
  • 怎么做网站的主页面编程软件scratch免费下载
  • 建设银行无锡分行网站网页版游戏单机游戏
  • 遵义网站建设中心如何低成本做网站推广
  • 国基建设集团有限公司网站学校网站网页模板
  • 舟山网站开发免费com域名网站
  • 网站开发 脚本之家怎么注册一个企业邮箱
  • 青岛做网站公企业管理软件销售
  • 简约风格的网站宁波余姚网站建设
  • 口碑好的免费网站建设企业做网站电话约见客户的对话
  • 做网站采集传统的网站开发模式
  • 网站用哪个软件做中国建设银行行号查询
  • 公司简介网站模板常州建设工程信息网
  • 综合类门户网站有哪些wordpress媒体库一直转圈
  • 官方网站建设属于什么科目室内设计很多人都干不下去了
  • 如何保存个人网站部队网站模板