查看: 488|回复: 0

[评测分享] 【米尔-全志T113-S3入门级开发板 测评】Socket编程 上传ADC数据

[复制链接]

该用户从未签到

发表于 2023-11-12 00:04:20 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 zyf1111 于 2023-11-12 00:07 编辑

   除了对外设的基础操作外,对外的通信也是需要掌握的,比如使用的命令窗口就是使用串口来进行传输的。网络的使用比较重要,这次就来做Linux 下socket的网络编程。
   基于socket的网络编程,互联网上可谓数不胜数,多的是代码段和测试程序,来看下这段程序。

  1. #include <sys/stat.h>
  2. #include <fcntl.h>
  3. #include <errno.h>
  4. #include <netdb.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <stdlib.h>
  12. #include <unistd.h>
  13. #define SERVER_PORT 6666

  14. /*
  15. 连接到服务器后,会不停循环,等待输入,
  16. 输入quit后,断开与服务器的连接
  17. */

  18. int main()
  19. {

  20.         //客户端只需要一个套接字文件描述符,用于和服务器通信

  21.         int clientSocket;

  22.         //描述服务器的socket

  23.         struct sockaddr_in serverAddr;
  24.         char sendbuf[200];
  25.         char recvbuf[200];

  26.         int iDataNum;

  27.         if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)

  28.         {

  29.                 perror("socket");

  30.                 return 1;

  31.         }

  32.         serverAddr.sin_family = AF_INET;

  33.         serverAddr.sin_port = htons(SERVER_PORT);

  34.         //指定服务器端的ip,本地测试:127.0.0.1

  35.         //inet_addr()函数,将点分十进制IP转换成网络字节序IP

  36.         serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

  37.         if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0)

  38.         {

  39.                 perror("connect");

  40.                 return 1;

  41.         }

  42.         printf("连接到主机...\n");

  43.         while(1)

  44.         {

  45.                 printf("发送消息:");

  46.                 scanf("%s", sendbuf);

  47.                 printf("\n");

  48.                 send(clientSocket, sendbuf, strlen(sendbuf), 0);



  49.                 if(strcmp(sendbuf, "quit") == 0)

  50.                 break;

  51.                 printf("读取消息:");

  52.                 recvbuf[0] = '\0';

  53.                 iDataNum = recv(clientSocket, recvbuf, 200, 0);

  54.                 recvbuf[iDataNum] = '\0';

  55.                 printf("%s\n", recvbuf);

  56.         }

  57.         close(clientSocket);

  58.         return 0;

  59. }
复制代码
  这是一段比较一般的程序,不过能够实现功能,在主程序里存在键盘输入的等待,阻塞了后面的运行,也就是不能及时搜到服务端的数据,对于测试来说,这也不算大问题,测试下看看效果  板子运行的
   2.png
服务端程序呈现的
3.png
多少是有点别扭的。所以实际应用不能这么干。那么就结合之前的测试做个相对实际的小应用。读取ADC的数值,发送的TCP服务端,也就是电脑端的程序来显示。
修改后的代码是这样子的
  1. <blockquote>
复制代码
在我的CodeBlocks中编译后,运行的效果如下
   1.png
  每秒钟收到一次ADC的数值,因为板卡的ADC引脚没有接到电压源所以数值没有变化。主要是验证了网络通信的一个实际应用。能够达到预期。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

手机版|小黑屋|与非网

GMT+8, 2024-5-20 20:14 , Processed in 0.103532 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.