嵌入式linux下的网络通信编程

 实验步骤如下:

(1)连接好arm板;

(2)修改网络,修改arm板网络设置为

IP为:192.168.16.95;

子网掩码为:255.255.255.0;

默认网关为:192.168.16.1;

DNS为:192.168.16.1;

(3)修改虚拟机中ubuntu的网络设置:

​编辑

连接好arm板之后,应该会有以太网这个选项,如果没有,拔掉arm板重新连接,将arm板连接到虚拟机上。

点击以太网,点击设置

​编辑

再次点击设置

修改Ipv4为手动,将ip地址修改为与开发板同一网段的并且与网关和开发板不同的任意地址,这里将ip地址设置为192.168.16.3,子网掩码与网关地址以及开发板地址相同(如上图所示)。

(4)使用ping命令·查看网络连通性;

​编辑

如图所示,可以ping通,代表网络配置成功,可以连接。

(5)使用ssh连接开发板;

这边的密码为自己设置的连接密码。

挂载共享文件夹:

mkdir project

mount -t nfs 192.168.16.3:/mnt/ShareFolder /project -o nolock,tcp,bg,hard,intr,nfsvers

这个命令不成功使用下面这个命令:

mount -t nfs 192.168.16.3:/mnt/ShareFolder /project -o nolock

意思是将/mnt/ShareFolder目录下的文件夹及文件挂载到arm板上的project文件夹下。

(6)在虚拟机Ubuntu中再次新建窗口,打开共享文件夹,创建两个文件client.c、server.c

server.c创建编辑是同样的方法。

client.c代码如下:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MAXLINE 1024
int main(int argc,char **argv)
{
    char *servInetAddr = "192.168.16.95";
    int socketfd;
    struct sockaddr_in sockaddr;
    char recvline[MAXLINE], sendline[MAXLINE];
    int n;
    if(argc != 2)
    {
        printf("client <ipaddress> \n");
        exit(0);
    }
    socketfd = socket(AF_INET,SOCK_STREAM,0);
    memset(&sockaddr,0,sizeof(sockaddr));
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = htons(10004);
    inet_pton(AF_INET,servInetAddr,&sockaddr.sin_addr);
    if((connect(socketfd,(struct sockaddr*)&sockaddr,sizeof(sockaddr))) < 0 )
    {
        printf("connect error %s errno: %d\n",strerror(errno),errno);
        exit(0);
    }
    printf("send message to server\n");
    fgets(sendline,1024,stdin);
    if((send(socketfd,sendline,strlen(sendline),0)) < 0)
    {
        printf("send mes error: %s errno : %d",strerror(errno),errno);
        exit(0);
    }
    close(socketfd);
    printf("exit\n");
    exit(0);
}

server.c代码如下:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <arpa/inet.h>
#define MAXLINE 1024
int main(int argc,char **argv)
{
    int listenfd,connfd;
    struct sockaddr_in sockaddr;
    char buff[MAXLINE];
    int n;
    memset(&sockaddr,0,sizeof(sockaddr));
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    sockaddr.sin_port = htons(10004);
    listenfd = socket(AF_INET,SOCK_STREAM,0);
    bind(listenfd,(struct sockaddr *) &sockaddr,sizeof(sockaddr));
    listen(listenfd,1024);
    printf("Please wait for the client information\n");
    for(;;)
    {
        if((connfd = accept(listenfd,(struct sockaddr*)NULL,NULL))==-1)
        { 
            printf("accpet socket error: %s errno :%d\n",strerror(errno),errno);
            continue;
        }
        n = recv(connfd,buff,MAXLINE,0);
        buff[n] = '\0';
        printf("recv msg from client:%s",buff);
        close(connfd);
    }
    close(listenfd);
}

(7)编译运行;

切换到共享文件夹目录下,

​编辑(8)在arm板上执行:./server

​编辑

(9)在Ununtu上执行:./client 192.168.16.95

(10)结果:

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值