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

山西发布紧急通知网站推广优化哪家公司好

山西发布紧急通知,网站推广优化哪家公司好,年会策划,wordpress侧边栏加视频板块LWIP配置 服务器端实现 客户端实现 错误分析 一。LWIP配置#xff08;FREERTOS配置#xff0c;ETH配置#xff0c;LWIP配置#xff09; 1.FREERTOS配置 为什么要修改定时源为Tim1#xff1f;不用systick#xff1f; 原因#xff1a;HAL库与FREERTOS都需要使用systi…LWIP配置 服务器端实现 客户端实现 错误分析 一。LWIP配置FREERTOS配置ETH配置LWIP配置 1.FREERTOS配置 为什么要修改定时源为Tim1不用systick 原因HAL库与FREERTOS都需要使用systick两者冲突所以修改时钟源让FREERTOS使用Tim1。 2.ETH配置 3.LWIP配置 不使用DHCP 4.步骤 1freertos.c中会自己出现一个Lwip初始化 运行后结果命令行中输入ping 192.168.1.10有回复 二。服务器端 实验一《stm32作为服务器端COMMBOX串口作为客户端》 1.功能分析 小写转大写 2.步骤 1建立socket_tcp_server.h #ifndef SOCKET_TCP_SERVER_H #define SOCKET_TCP_SERVER_H#define SERVER_IP 192.168.1.11 #define SERVER_PORT 6666 #define BUFF_SIZE 1024void vTcpServerTask(void);#endif 2建立socket_tcp_server.c并添加到文件中 #include socket_tcp_server.h #include lwip/sockets.h #include ctype.hchar ReadBuff[BUFF_SIZE];/*** brief TCP 服务器任务* param None* retval None*/ void vTcpServerTask(void){int sfd, cfd, n, i;struct sockaddr_in server_addr, client_addr;socklen_t client_addr_len;//创建socketsfd socket(AF_INET, SOCK_STREAM, 0);server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);server_addr.sin_addr.s_addr htonl(INADDR_ANY);//绑定socketbind(sfd, (struct sockaddr *)server_addr, sizeof(server_addr));//监听socketlisten(sfd, 5);//等待客户端连接client_addr_len sizeof(client_addr);cfd accept(sfd, (struct sockaddr *)client_addr, client_addr_len);printf(client is connect cfd %d\r\n,cfd);while(1){//等待客户端发送数据n read(cfd, ReadBuff, BUFF_SIZE);//进行大小写转换for(i 0; i n; i){ReadBuff[i] toupper(ReadBuff[i]); }//写回客户端write(cfd, ReadBuff, n);} }3freertos.c中网络任务中添加服务器运行函数。 不要忘记添加头文件 vTcpServerTask(); 3.现象演示 1使用COMMBOX串口调试工程添加socket网络客户端 目标ip为stm32的ip.端口在.h中 2stm32客户端发送的字母变大写 三。客户端创建 实验二《stm32作为客户端COMMBOX串口作为服务器端》 1.创建socket_tcp_client.c与socket_tcp_client.h 1socket_tcp_client.c #include socket_tcp_server.h #include socket_tcp_client.h #include lwip/sockets.h #include ctype.hstatic char ReadBuff[BUFF_SIZE];void vTcpClientTask(void) {int cfd, n, i;struct sockaddr_in server_addr;//创建socketcfd socket(AF_INET, SOCK_STREAM, 0);server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);server_addr.sin_addr.s_addr inet_addr(SERVER_IP);//连接到服务器connect(cfd, (struct sockaddr*)server_addr, sizeof(server_addr));printf(server is connect ok\r\n);while(1){//等待服务器发送数据n read(cfd, ReadBuff, BUFF_SIZE);//进行大小写转换for(i 0; i n; i){ReadBuff[i] toupper(ReadBuff[i]); }//写回服务器write(cfd, ReadBuff, n);} } 2socket_tcp_client.h #ifndef _SOCKET_TCP_CLIENT_H #define _SOCKET_TCP_CLIENT_Hvoid vTcpClientTask(void);#endif可能遇到的问题         由于打开了防火墙所以无法连接 补充上述代码的问题 1.代码封装性不好         2.代码对边界错误提示太少 四。代码的优化 1.函数在封装文件为socket_warp.c与socket_warp.h 1socket_warp.h #ifndef _SOCKET_WRAP_H #define _SOCKET_WRAP_H#include lwip/sockets.hint Socket(int domain, int type, int protocol);int Bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);int Listen(int sockfd, int backlog);int Accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); int Connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);int Write(int fd,const void *buf,size_t nbytes); int Read(int fd,void *buf,size_t nbyte);int Sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen); int Recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, socklen_t *fromlen);#endif (2)socket_warp.c #include socket_wrap.h #include FreeRTOS.h #include task.hint Socket(int domain, int type, int protocol){int fd;fdsocket(domain,type,protocol);if(fd0){printf(create socket error\n);//没有创建完成那么这个任务也没有必要运行直接切换上下文//返回一个小于零的数vTaskDelete(NULL);}return fd; }int Bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen){int ret;retbind(sockfd,addr,addrlen);if(ret 0){printf(bind socket error\r\n);//当调用删除任务就会切换上下文CPU执行其他任务vTaskDelete(NULL); }return ret; }int Listen(int sockfd, int backlog){int ret;retlisten(sockfd,backlog);if(ret0){printf(listen socket error\n);vTaskDelete(NULL);}return ret; }int Accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen){int fd; again: fdaccept(sockfd,addr,addrlen);if(fd0){printf(accept socket error\n);goto again;}return fd; } int Connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen){int ret;retconnect(sockfd,addr,addrlen);if(ret0){printf(connect socket error\n);//先关闭当前的socket其实内部是删除这个socket的内存块不删除会导致下次无法生成close(sockfd);}return ret; }int Write(int fd,const void *buf,size_t nbytes){int ret;retwrite(fd,buf,nbytes);//没有书写完成就关闭socketif(ret0){printf(write socket error\n);close(fd);}return ret; } int Read(int fd,void *buf,size_t nbyte){int ret;retread(fd,buf,nbyte);if(ret0){printf(read socket is close\n);close(fd);}else if(ret0){printf(read socket error\n);close(fd);} }int Sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen){int ret; again: retsendto(sockfd,msg,len,flags,to,tolen);if(ret0){printf(sendto socket error\n);goto again;}return ret; }int Recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, socklen_t *fromlen){int ret; again: retrecvfrom(sockfd,buf,len,flags,from,fromlen);if(ret0){printf(recvfrom socket error\n);goto again; }return ret; } 上述为封装函数包括tcp_server,tcp_client已经后续的udp_server 2.socket_tcp_server.c与socket_tcp_client.c 1.socket_tcp_server.c #include socket_udp_server.h #include socket_tcp_server.h #include socket_wrap.h #include ctype.hstatic char ReadBuff[BUFF_SIZE];void vUdpServerTask(){int sfd, n, i;struct sockaddr_in server_addr, client_addr;socklen_t client_addr_len;int optval1;//创建socketsfdSocket(AF_INET, SOCK_DGRAM, 0);setsockopt(sfd,SOL_SOCKET ,SO_BROADCAST,optval,sizeof(optval));//绑定socketserver_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);server_addr.sin_addr.s_addr htonl(INADDR_ANY);Bind(sfd, (struct sockaddr *)server_addr, sizeof(server_addr));//处理client_addr_lensizeof(client_addr);while(1){//等待客户端发送数据n Recvfrom(sfd, ReadBuff, BUFF_SIZE, 0, (struct sockaddr *)client_addr, client_addr_len);ReadBuff[n] \0;printf(recv data:%s\r\n,ReadBuff);//进行大小写转换for(i 0; i n; i){ ReadBuff[i] toupper(ReadBuff[i]); }//写回客户端Sendto(sfd, ReadBuff, n, 0, (struct sockaddr *)client_addr, client_addr_len);}} 2.socket_tcp_client.c #include socket_tcp_server.h #include socket_tcp_client.h #include socket_wrap.h #include ctype.h #include FreeRTOS.h #include task.h#include string.hstatic char ReadBuff[BUFF_SIZE];void vTcpClientTask(void) {int cfd, n, i, ret;struct sockaddr_in server_addr;// int so_reuseaddr_val 1; again://创建socketcfd Socket(AF_UNSPEC, SOCK_STREAM, 0);//使能socket层 心跳检测 // setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, so_reuseaddr_val, sizeof(int));server_addr.sin_family AF_INET;server_addr.sin_port htons(SERVER_PORT);server_addr.sin_addr.s_addr inet_addr(SERVER_IP); //连接到服务器//connect 其实是一个阻塞接口内部要完成TCP的三次握手当然有超时机制所以我们需要等一段时间才能重新连接到服务器ret connect(cfd, (struct sockaddr*)server_addr, sizeof(server_addr));if(ret 0){//100ms去连接一次服务器vTaskDelay(1000);printf(connect fail\r\n);goto again;}printf(server is connect ok\r\n);while(1){//等待服务器发送数据n Read(cfd, ReadBuff, BUFF_SIZE);if(n 0){goto again;}//进行大小写转换for(i 0; i n; i){ReadBuff[i] toupper(ReadBuff[i]); }//写回服务器n Write(cfd, ReadBuff, n);if(n 0){goto again;}} } 结果pc端的COMMBOX创建或者关闭服务器或者客户端时串口都会打印出内容提示打开或者关闭。
http://www.dnsts.com.cn/news/104374.html

相关文章:

  • 网站流量数据分析网站建设厘金手指排名二一
  • 建设银网官方网站福州公司网站设计
  • 巨鹿建设银行网站首页优化关键词哪家好
  • WordPress仿站助手68网页设计欣赏
  • 杭州市网站建设公司房产中介网站开发费用
  • 如何做网站做网站需要多少钱dede和wordpress哪个安全
  • 农业建设信息网站网站被黑 百度跳转
  • 企业网站建设的必要性及维护优设
  • 做视频网站 许可证个人做网站下载网上图可以吗
  • 网站上做的广告有哪些种域名访问网站怎么进入
  • 广安建设企业网站精准推广引流5000客源
  • 大型网站服务器架构网站制作电话
  • 企业网站源码 html5+xml重庆最新通知今天
  • 网站标题关键词高清直播
  • wordpress手机登陆不了郑州网站优化哪家专业
  • 网站建设公司专业网站开发需求wordpress 查询插件
  • 网站页面设计特点运城网站推广
  • 怎么提高网站关键词排名网站开发与应用 论文
  • 教育网站的建设网站开发基础知识简述
  • 云匠网接单能信吗嘉兴网站优化排名
  • 网站开发背景知识微信公众号登录入口在哪里
  • 博客网站制作asp网站下载
  • 有了ddns怎么建设网站电子商务专业怎么样
  • 东莞网站建设排名公司台州手机模板建站
  • 专业网站建设质量推荐网站建设 福田
  • 郑州网络科技公司有哪些wordpress 代码优化
  • 洛阳建设企业网站公司南京旅游网页设计
  • 生物网站建设洛阳app制作公司
  • 做网站找客户电子商务网络营销
  • 做网站需要啥备案之类的嘛火车头采集器网站被k