博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.9UDP客户端服务器-基于OK6410
阅读量:2292 次
发布时间:2019-05-09

本文共 2574 字,大约阅读时间需要 8 分钟。

  1. 实验4-3:UDP客户端服务器

  • 实验目的:

熟悉UDP客户端服务器编程

 

  • 实验要求:

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

2、传输信息要求如下

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

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

 

  • 实验步骤:
    • 服务端的程序:

      #include <stdio.h>

      #include <stdlib.h>

      #include <string.h>

      #include <unistd.h>

      #include <sys/types.h>

      #include <sys/socket.h>

      #include <netinet/in.h>

      #include <arpa/inet.h>

       

      #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()error\n");

      exit(1);

      }

      addrlen =sizeof(client);

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

      perror("accept()error\n");

      exit(1);

      }

      printf("Yougot a connection from cient's ip is %s, prot is %d\n",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<stdio.h>

#include <stdlib.h>

#include<unistd.h>

#include<string.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<netdb.h>

 

#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 <IP Address>\n",argv[0]);

exit(1);

}

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

printf("gethostbyname()error\n");

exit(1);

}

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

printf("socket()error\n");

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()error\n");

exit(1);

}

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

printf("recv() error\n");

exit(1);

}

buf[num-1]='\0';

printf("Server Message: %s\n",buf);

close(sockfd);

return 0;

}

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

 

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

 

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

 

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

 

实验心得:

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

转载于:https://www.cnblogs.com/FORFISH/p/4201834.html

你可能感兴趣的文章
Python模块之---Pexpect
查看>>
Python的Pexpect详解
查看>>
Python模块:optparse 处理命令行参数
查看>>
supervisor安装配置与使用
查看>>
全文索引原理及范例
查看>>
Django运行方式及处理流程总结
查看>>
Android Booting
查看>>
Android4.0之init读取init.ic的过程
查看>>
uboot-2011.12移植到S3C2440(二)——点亮LED灯,the very beginning。
查看>>
LeetCode之Median Of Two Sorted Arrays
查看>>
java.util.Stack类简介
查看>>
求职信结尾处常用语
查看>>
申请原因常用语
查看>>
求职信开头处常用语
查看>>
英文求职信(五)
查看>>
英文求职信(四)
查看>>
英文求职信(三)
查看>>
英文求职信(二)
查看>>
UML在关系型数据库设计中的应用
查看>>
Hibernate为什么如此流行?
查看>>