查看: 867|回复: 4

[原创] RioTboard板子·····linux系统上C语言版网络编程实验

[复制链接]

33

主题

10

好友

2412

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    无聊
    2016-11-9 20:46
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 2014-6-7 18:48:32 |显示全部楼层
    本帖最后由 木子鱼 于 2014-6-7 19:23 编辑

         继上一帖子是java语言版的socket网络编程实验,现在推出C语言版的。代码是有参考其他文献的,如有雷同,纯属巧合!
         想法是将Rio的Ubuntu系统搭建成一个服务器 server端,在上面运行服务器端的c程序。
         电脑ubuntu    作为 client 端,运行客户端的c程序。
    ````````````````````````````````````````````````````````````````````````````````````````````````````
    步骤:1、服务器端程序的编写   service.c
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/ioctl.h>
    #include <termios.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <signal.h>
    #include <sys/time.h>
    void main()
    {
        pid_t fd;
        int listensock,connsock;
        char recvbuff[100]; //定义要接收的数据缓冲区
        struct sockaddr_in serveraddr; //定义网络套接字地址结构
        listensock = socket(AF_INET,SOCK_STREAM,0); //创建一个套接字,用于监听
       bzero(&serveraddr,sizeof(struct sockaddr)); //地址结构清零
       serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
       serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //指定接受任何连接
       serveraddr.sin_port = htons(5000); //指定监听的端口
       bind(listensock,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr_in));//给套接口邦定地址
       listen(listensock,1024); //开始监听
      connsock = accept(listensock,(struct sockaddr *)NULL, NULL);
       //建立通讯的套接字,accept函数,等待客户端程序使用connect函数的连接
       recv(connsock,recvbuff,sizeof(recvbuff),0); //接收服务器的数据
       printf("%s\n",recvbuff); //打印接收到的数据
       sleep(2);
       close(connsock); //关闭通讯套接字
       close(listensock); //关闭监听套接字
    }
    ```````````````````````````````````````````````````````````````````````````````````````````````````
       客户端程序的编写      client.c
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/ioctl.h>
    #include <termios.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <signal.h>
    #include <sys/time.h>
    int main(int argc,char **argv)
    {
        pid_t fd;
        const char buff[] = "Hello! Welcome here\r\n"; //定义要发送的数据缓冲区;
        int sockfd,connsock; //定义一个socket套接字,用于通讯
        struct sockaddr_in serveraddr;//定义网络套接字地址结构
    if(argc!= 2)
    {
         printf("Usage: echo ip地址");
         exit(0);
      }
       sockfd =socket(AF_INET,SOCK_STREAM,0); //创建一个套接字
       bzero(&serveraddr,sizeof(serveraddr));
       serveraddr.sin_family = AF_INET; //指定使用的通讯协议族
       serveraddr.sin_port = htons(5000);//指定要连接的服务器的端口
       inet_pton(AF_INET, argv[1], &serveraddr.sin_addr);
       connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); //连接服务器
       send(sockfd,buff,sizeof(buff), 0);//向客户端发送数据
       close(sockfd); //关闭套接字
       return(0);
    }
    ```````````````````````````````````````````````````````````````````````````````````````````````````
    步骤:2、程序的编译
    service.c  是将运行在RIO板子上的,因此需要使用交叉编译工具,这里我就使用官网提供的交叉编译工具。
    在电脑Ubuntu终端中,运行指令 $arm-linux-gcc -o service-RIO service.c
    编译后成功得到   service-RIO   这个可执行文件。
    然后用$scp /home/smartwang/service-RIO linaro@192.168.1.122:~   指令将这个可执行文件传递到RIO板子系统上
    运行时输入指令   ./service-RIO
    client.c    是将运行在电脑Ubuntu上的,编译输入指令:$gcc client.c -o client-PC 编译后成功得到 client-PC 这个可执行文件。  运行时输入指令 ./client-PC 192.168.1.122             //此处IP 为服务器端IP地址

    3、运行
    首先运行服务器端程序,然后运行客户端程序,会看到服务器端有显示信息。
    Screenshot from 2014-06-07 18_46_10.png







    回复

    使用道具 举报

    2

    主题

    0

    好友

    798

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    开心
    2014-6-4 09:26
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-6-9 08:47:18 |显示全部楼层
    代码的中文注释不错,期待像这样细致的分享
    回复

    使用道具 举报

    33

    主题

    10

    好友

    2412

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    无聊
    2016-11-9 20:46
  • 签到天数: 229 天

    [LV.7]常住居民III

    发表于 2014-6-9 10:48:12 |显示全部楼层
    浮华若梦 发表于 2014-6-9 08:47
    代码的中文注释不错,期待像这样细致的分享

    呵呵  我也是有参考其他资料的
    回复

    使用道具 举报

    1083

    主题

    2

    好友

    1万

    积分

    翰林

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    [LV.6]常住居民II

    发表于 2014-6-10 09:36:42 |显示全部楼层
    谢谢楼主分享
    回复

    使用道具 举报

    1

    主题

    0

    好友

    145

    积分

    童生

    Rank: 2

  • TA的每日心情

    2016-3-30 01:31
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2014-6-22 23:44:58 |显示全部楼层
    嵌入式系统client&service的程序,用Qt去做只需调用几个类,快捷方便多了
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-5 22:28 , Processed in 0.192348 second(s), 14 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部