5.9UDP客户端服务器-基于OK6410

发布者:BlossomSunrise最新更新时间:2024-10-22 来源: cnblogs关键字:OK6410 手机看文章 扫描二维码
随时随地手机看文章
  1. 实验4-3:UDP客户端服务器

  • 实验目的:

熟悉UDP客户端服务器编程

 

  • 实验要求:

1、实现UDP客户端服务器回显程序

2、传输信息要求如下

(1)尝试用C语言结构去发送或接收一个信息包

(2)将服务器运行于开发板,客服端运行于ubuntu 12.04,抓包分析UDP协议

 

  • 实验步骤:

     

    • 服务端的程序:

      #include

      #include

      #include

      #include

      #include

      #include

      #include

      #include

       

      #define PORT 1234

      #define BACKLOG 1

       

      int main()

      {

      int listenfd, connectfd;

      struct sockaddr_in server;

      struct sockaddr_in client;

      socklen_t addrlen;

      if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

      {

      perror('Creating socket failed.');

      exit(1);

      }

      int opt =SO_REUSEADDR;

      setsockopt(listenfd,SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

      bzero(&server,sizeof(server));

      server.sin_family=AF_INET;

      server.sin_port=htons(PORT);

      server.sin_addr.s_addr= htonl (INADDR_ANY);

      if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1) {

      perror('Binderror.');

      exit(1);

      }

      if(listen(listenfd,BACKLOG)== -1){ /* calls listen() */

      perror('listen()errorn');

      exit(1);

      }

      addrlen =sizeof(client);

      if((connectfd = accept(listenfd,(struct sockaddr*)&client,&addrlen))==-1) {

      perror('accept()errorn');

      exit(1);

      }

      printf('Yougot a connection from cient's ip is %s, prot is %dn',inet_ntoa(client.sin_addr),htons(client.sin_port));

      send(connectfd,'Welcometo my server.n',22,0);

      close(connectfd);

      close(listenfd);

      return 0;

      }

2、在客户端传送信息,并接收回显结果

#include

#include

#include

#include

#include

#include

#include

#include

 

#define PORT 1234

#define MAXDATASIZE 100

 

int main(int argc, char *argv[])

{

int sockfd, num;

char buf[MAXDATASIZE];

struct hostent *he;

struct sockaddr_in server;

if (argc!=2) {

printf('Usage:%s n',argv[0]);

exit(1);

}

if((he=gethostbyname(argv[1]))==NULL){

printf('gethostbyname()errorn');

exit(1);

}

if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1){

printf('socket()errorn');

exit(1);

}

bzero(&server,sizeof(server));

server.sin_family= AF_INET;

server.sin_port = htons(PORT);

server.sin_addr =*((struct in_addr *)he->h_addr);

if(connect(sockfd,(struct sockaddr *)&server,sizeof(server))==-1){

printf('connect()errorn');

exit(1);

}

if((num=recv(sockfd,buf,MAXDATASIZE,0)) == -1){

printf('recv() errorn');

exit(1);

}

buf[num-1]='';

printf('Server Message: %sn',buf);

close(sockfd);

return 0;

}

3、在服务器接收客服端信息,显示并回显

 

    4、交叉编译服务器,并通过NFS共享拷贝到开发板运行

 

5、编译客服端,直接在ubuntu 12.04上运行

 

6、测试客户端与服务器能正常通过UDP传输信息

实验心得:

UDP是一种基于无连接的通信方式,该实验里,实现了一个服务器端:开发板,和一个客户端pc主机。两者进行信息的交流。上面是我的实现的截图。整个过程很是顺利。谢谢。


关键字:OK6410 引用地址:5.9UDP客户端服务器-基于OK6410

上一篇:3.5根文件系统的制作
下一篇:7.点亮led的操作

推荐阅读最新更新时间:2024-11-07 10:34

OK6410块设备驱动之用内存模拟磁盘
ramblock.c源码: // 参考drivers/block/xd.c,z2ram.c #include linux/major.h #include linux/vmalloc.h #include linux/init.h #include linux/module.h #include linux/blkdev.h #include linux/bitops.h #include linux/hdreg.h #define RAMBLOCK_SIZE 0x100000 static struct gendisk *ramblock_disk; static struct request_queue *ra
[单片机]
ok6410 按键测试c语言版程序
直接贴代码: /* name:led_key author:lvtory 硬件平台:ok6410 function: key1:实现从0-15二进制级数点亮led key2:实现初始化 key3-key6:按键对应点亮相应led 使用查询方式 create:2013.3.17 */ /**** led gpio NLED1-4 - GPM0-3 */ #define rGPMCON (*(volatile unsigned *)0x7F008820) #define rGPMDAT (*(volatile unsigned *)0x
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved