bbblack的网络socket通信实验

1. 本次用bbblack作网络的通信实验,对了,这个板子必须装SD卡才能启动吗?板载的4GB eMMC Flash 存储器,eMMC (Embedded Multi Media Card) 为MMC协会所订立的,eMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,看下原理图,果然是SD卡的接口,不过是8位数据线。

2. 看下数据手册里面的,有3个MMC接口,EMMC是MMC1的接口,板子上的SD卡接的是MMC0

3. 言归正传测试下socket的通信。先看下原理图,使用的是LAN8710

4. 搞个程序测试一下,一个问题,这些头文件的包含是怎么设置的?sys的文件夹是那个?恕我懵逼,去linux内核里面都不知道在哪里?如果是和内核相关的程序,比如驱动程序,那么所包含的头文件是在内核源码的安装目录下,即/usr/src/kernel/include,这时一般要在Makefile文件中指定内核源码目录,在编译时指定INCLUDE目录,那我这次编译这个文件,需要写一个makefile的吧,应用层的代码,按照以前驱动LED的方式。应该不可以在开发板上直接编译的吧,是在电脑上用交叉编译环境编译的才对,生成.o文件,传给开发板,为啥LED的文档,直接放板子上编译?不敢相信。

如果是应用程序,并且使用GCC进行普通编译,如果编译时没有使用-I选项指定包含目录的话,那么默认的头文件目录在/usr/include(电脑ubuntu的路径)下,刚才去ubuntu电脑看了一下,果然是有代码,我以前以为所有这些头文件都是开发板上的kernel内核里面的,也就是说编译的时候也会用到电脑ubuntu的头文件。

那么这个sys/socket.h头文件在什么地方?是电脑ubuntu里面的,还是开发板的内核源码里面的?位置在哪里?不会是在交叉编译器的路径里面吧。我只是不觉的交叉编译器会这么强大,连socket.h这种头文件都包含了?理论上这些不是应该用内核里面的吗?

如果是应用程序,采用交叉编译】,编译时没有使用-I选项指定包含目录的话,那么默认的头文件搜索路径为/usr/local/arm/2.95.3/arm-linux/include,即交叉编译器的安装目录下的include目录。

#include<stdio.h>
#include<string.h>
#include<strings.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <sys/stat.h>
#define SERVER_IP "192.168.1.106"
#define SERVER_PORT 10010
#define MY_IP "192.168.1.106"
#define MY_PORT 10010
#define FILE_NAME "/dev/ttyO0"
#define MAX_LEN 128
int main(void)
{
    int serial_buffer[MAX_LEN] = {0};
    char data2send[4096] = {0};
    int numbers2send = 0;
    int i = 0;
    int serial_fd = open(FILE_NAME, O_RDWR);
    if(serial_fd < 0)
    {
        printf("Serial port open error.\n");
        return -1;
    }
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if(socket_fd < 0)
    {
        perror("socket_fd");
        return -1;
    }
    printf("Ready to connect the server...\n");
    struct sockaddr_in server_addr = {0};
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_PORT);
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
    int ret = connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    if(ret < 0)
    {
        perror("connect");
        return -1;
    }
    printf("connect success.\n");
    while(1)
    {
      for(i=0; i<MAX_LEN; i++)
      {
        serial_buffer[i] = 0;
      }
      read(serial_fd, serial_buffer, MAX_LEN);
      printf("[%s].\n", serial_buffer);
      send(socket_fd, serial_buffer, MAX_LEN, 0);
    }
    close(serial_fd);
    close(socket_fd);
    return 0;
}

5. 安装个交叉编译器看下里面有啥

原文地址:https://www.cnblogs.com/429512065qhq/p/8361925.html

时间: 2024-10-08 03:31:42

bbblack的网络socket通信实验的相关文章

JAVA基础知识之网络编程——-基于AIO的异步Socket通信

异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞IO都是针对第一步来划分的,如果发出IO请求会阻塞线程,就是阻塞IO,否则就是非阻塞IO. 同步IO和非同步IO是针对第二步来说的,如果实际IO操作是由操作系统完成,再返回给程序,就是异步IO. 如果实际的IO需要程序本身去执行,会阻塞线程,就是同步IO. JAVA7的NIO.2提供了异步的channel,

网络编程:Http通信与Socket通信

http://note.youdao.com/share/?id=f14d304548003f65e34255d3ddf9df31&type=note 网络编程:Http通信与Socket通信(移动互联核心) 知识点概述: 1.Socket通信:面向连接(TCP)和无连接的(UDP) 2.HttpURLConnection 接口:Get和Post方式 3.HttpClient接口:Get和Post方式 知识点详述: 1 Socket通信 Socket称为”套接字“,用于描述IP地址和端口,它是支

Java基础知识强化之网络编程笔记02:Socket通信原理图解

1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网络通信其实就是Socket间的通信.  • 数据在两个Socket间通过IO传输. 2.  Socket通信原理图解:

Java网络编程之Socket通信(二)

之前在前面已经介绍了Socket通信的一些基本原理,以及如何让客户端与服务器端建立通信,和实现通信的一些基本步骤(包括首先使得服务器端与客户端建立连接,建立连接之后,服务器端开始侦听客户端的请求,侦听到客户端的请求之后,通过输入输出流处理相关信息实现通信,最后通信完毕结束通信等一系列流程). 但是之前只是单个客户端与服务器进行通信,而我们实际应用中单个客户端的情况几乎不存在,都是多个客户端同时与服务器进行交互(这里同时交互就会出现并发性的问题,对于并发性的问题暂时还不是很懂,只知道有这个概念),

网络协议栈学习(一)socket通信实例

网络协议栈学习(一)socket通信实例 该实例摘自<linux网络编程>(宋敬彬,孙海滨等著). 例子分为服务器端和客户端,客户端连接服务器后从标准输入读取输入的字符串,发送给服务器:服务器接收到字符串后,发送给服务器:服务器接收到字符串后统计字符串的长度,然后将该值传给客户端:客户端将接收到的信息打印到标准输出. 一.服务器端代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #in

Android网络编程之Socket通信

Socket(套接字)是一种通信机制,可以实现单机或跨网络进行通信,其创建需要明确的区分C(客户端)/S(服务器端),支持多个客户端连接到同一个服务器.有两种传输模式: 1).面向连接的传输:基于TCP协议,可靠性高,但效率低: 2).面向无连接的传输:基于UDP协议,可靠性低,但效率高: Android中,直接采用Socket通信应该是我们遇到的最低级的网络运用.尽管已经作了很大程度的抽象,但是纯粹的Socket通信,仍然给开发者留下很多细节需要处理,尤其在服务器端,开发者需要处理多线程以及数

java网络编程Socket通信详解

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信

阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NIO可以实现非阻塞IO, 这样就可以使用一个线程处理所有的客户请求. 基于NIO的非阻塞Socket通信 服务器将用来监听客户端请求的channel注册到selector上,启动一个线程,使用selector的select()获取求情的客户端的channel数量, 当监听到有客户端请求时,就通过Sel

网络编程-SOCKET开发之----3. socket通信工作流程

1. TCP的socket通信流程 服务端 1)socket----创建socket对象. 2)bind----绑定本机ip+port. 3)listen----监听来电,若在监听到来电,则建立起连接. 4)accept----再创建一个socket对象给其收发消息.原因是现实中服务端都是面对多个客户端,那么为了区分各个客户端,则每个客户端都需再分配一个socket对象进行收发消息. 5)read.write----就是收发消息了. 客户端 1)socket----创建socket对象. 2)c