17.C1:重新定义起草视频,让创意与效率共舞

核心内容摘要

《我成为阶下囚》:一段跨越禁忌的爱恋,一场命运的牢笼
我爱搞52G.PPT:数字创意的无限可能,让你的表达更出彩

歪歪漫画免费进入页面在线阅读:解锁你的二次元世界,畅享无限精彩!

文章目录TCP服务端基础服务端TCP服务设计模式迭代服务一次处理一个客户端多进程并发服务僵尸进程处理信号处理多线程并发服务嵌入式设备线程注意TCP客户端基础客户端交互式客户端客户端断线重连机制TCP服务端基础服务端// 基础TCP服务器核心流程#defineBUFFER_SIZE1024// 根据设备内存自定义charbuf[BUFFER_SIZE];intmain(){//

创建socketfdsocket(AF_INET,SOCK_STREAM,

;//

准备地址结构addr.sin_familyAF_INET;addr.sin_porthtons(PORT);addr.sin_addr.s_addr0;// INADDR_ANY的另一种写法//

绑定地址bind(fd,(structsockaddr*)addr,sizeof(addr));//

开始监听listen(fd,BACKLOG);//

接受连接阻塞等待newfdaccept(fd,NULL,NULL);// 不关心客户端地址//

接收数据read(newfd,buf,BUFFER_SIZE);//

关闭连接close(newfd);close(fd);return0;}TCP服务设计模式迭代服务一次处理一个客户端// 简化的迭代服务器框架while(

{client_fdaccept(server_fd,NULL,NULL);if(client_fd

continue;handle_client(client_fd);// 处理客户端请求close(client_fd);// 处理完后关闭}缺点无法并发处理多个客户端多进程并发服务// 父进程监听连接创建子进程处理// 子进程处理具体客户端请求结束后退出pid_tpidfork();if(pid

{// 子进程close(server_fd);// 关闭不需要的监听sockethandle_client(client_fd);close(client_fd);exit(

;// 子进程结束}else{// 父进程close(client_fd);// 父进程关闭已分发的客户端socketwaitpid(-1,NULL,WNOHANG);// 非阻塞回收子进程}僵尸进程处理信号处理// 使用信号处理函数回收子进程voidsigchld_handler(intsig){while(waitpid(-1,NULL,WNOHANG)

{// 回收所有已终止的子进程}}// 注册信号处理器signal(SIGCHLD,sigchld_handler);// 更推荐使用sigaction可重启系统调用structsigactionsa;sa.sa_handlersigchld_handler;sigemptyset(sa.sa_mask);sa.sa_flagsSA_RESTART|SA_NOCLDSTOP;sigaction(SIGCHLD,sa,NULL);多线程并发服务// 主线程监听连接创建子线程// 工作线程处理客户端请求void*client_handler(void*arg){intclient_fd*(int*)arg;// 处理客户端...close(client_fd);returnNULL;}// 创建线程处理每个客户端pthread_ttid;int*client_fd_ptrmalloc(sizeof(int));*client_fd_ptrclient_fd;pthread_create(tid,NULL,client_handler,client_fd_ptr);pthread_detach(tid);// 分离线程自动回收资源嵌入式设备线程注意//

设置线程栈大小嵌入式内存有限pthread_attr_tattr;pthread_attr_init(attr);pthread_attr_setstacksize(attr,

;// 8KB栈空间//

线程池模式避免频繁创建销毁线程//

注意线程安全共享数据加锁TCP客户端基础客户端// 核心流程intmain(){//

创建socketfdsocket(AF_INET,SOCK_STREAM,

;//

设置服务器地址addr.sin_familyAF_INET;addr.sin_porthtons(PORT);addr.sin_addr.s_addrinet_addr(

127.

0.

0.

;//

连接服务器connect(fd,(structsockaddr*)addr,sizeof(addr));//

发送数据write(fd,STR,sizeof(STR));//

关闭连接close(fd);}交互式客户端// 支持命令行参数和交互式输入intmain(intargc,char*argv[]){// 检查参数if(argc

{fprintf(stderr,用法: %s IP地址 端口\n,argv[0]);exit(EXIT_FAILURE);}// 解析参数char*server_ipargv[1];intserver_portatoi(argv[2]);// 创建socket和连接...// 交互循环while(

{printf(请输入消息: );fgets(buf,BUFSIZ,stdin);// 发送数据intnwrite(fd,buf,strlen(buf));if(n

{perror(发送失败);break;}// 可选接收服务器响应// n read(fd, response, sizeof(response));}}客户端断线重连机制// 嵌入式设备常用增加连接稳定性#defineMAX_RETRY5#defineRETRY_DELAY3// 秒intconnect_with_retry(constchar*ip,intport,intmax_retry){intsockfd;structsockaddr_inaddr;for(intretry0;retrymax_retry;retry){sockfdsocket(AF_INET,SOCK_STREAM,

;if(sockfd

{perror(创建socket失败);return-1;}memset(addr,0,sizeof(addr));addr.sin_familyAF_INET;addr.sin_porthtons(port);inet_pton(AF_INET,ip,addr.sin_addr);if(connect(sockfd,(structsockaddr*)addr,sizeof(addr))

{printf(连接成功第%d次尝试\n,retry

;returnsockfd;}close(sockfd);printf(连接失败%d秒后重试...\n,RETRY_DELAY);sleep(RETRY_DELAY);}fprintf(stderr,连接失败达到最大重试次数\n);return-1;}

y31成色1.232c官方版下载-y31成色1.232c官方版下载应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123