嵌入式 UDP网络编程实例

原创 2013年12月02日 14:51:01
server.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
//#include <openssl/ssl.h>
//#include <openssl/err.h>
#include <pthread.h>
#include <sys/time.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <unistd.h>
#include <signal.h>

 

#include <sys/time.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <dirent.h>
#include <sys/vfs.h>



#define SERVER_PORT 8003
#define MSG_BUF_SIZE 128

int main(void)
{
    intsockfd;
    structsockaddr_in my_addr, their_addr;
    intaddr_len, numbytes;
    charbuffer[MSG_BUF_SIZE];

    if ((sockfd= socket(AF_INET, SOCK_DGRAM, 0)) == -1)
   {
       fprintf(stderr, "socket error");
       exit(1);
   }

   my_addr.sin_family = AF_INET;
   my_addr.sin_port = htons(SERVER_PORT);
   my_addr.sin_addr.s_addr = INADDR_ANY;
   bzero(&(my_addr.sin_zero), 8);

    if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(structsockaddr)) == -1)
   {
       fprintf(stderr, "bind error");
       exit(1);
   }
    addr_len =sizeof(struct sockaddr);
    if((numbytes = recvfrom(sockfd, buffer, MSG_BUF_SIZE, 0, (structsockaddr *)&their_addr, &addr_len)) == -1)
   {
       fprintf(stderr, "recvfrom error");
       exit(1);
   }

    printf("gotpacket from %s\n",inet_ntoa(their_addr.sin_addr));
   printf("packet is %d bytes long\n", numbytes);
   buffer[numbytes] = '\0';
   printf("packet contains \"%s \"\n", buffer);
   close(sockfd);
}

client.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
//#include <openssl/ssl.h>
//#include <openssl/err.h>
#include <pthread.h>
#include <sys/time.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <unistd.h>
#include <signal.h>

 

#include <sys/time.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <dirent.h>
#include <sys/vfs.h>



#define SERVER_PORT 8003

int main(int argc, char *argv[])
{
    intsockfd;
    structsockaddr_in their_addr;
    structhostent *hostname;
    intnum_bytes;

    if (argc !=3)
   {
       fprintf(stderr, "usage: talker hostnamemessage\n");
       exit(1);
   }

    if((hostname = gethostbyname(argv[1])) == NULL)
   {
       fprintf(stderr, "gethostbyname error");
       exit(1);
   }

    if ((sockfd= socket(AF_INET, SOCK_DGRAM, 0)) == -1)
   {
       fprintf(stderr, "socket");
       exit(1);
   }
   their_addr.sin_family = AF_INET;
   their_addr.sin_port = htons(SERVER_PORT);
   their_addr.sin_addr = *((struct in_addr*)hostname->h_addr);
   bzero(&(their_addr.sin_zero), 8);

    if((num_bytes = sendto(sockfd, argv[2], strlen(argv[2]), 0, (structsockaddr *)&their_addr, sizeof(struct sockaddr))) ==-1)
   {
       fprintf(stderr, "sendto error");
       exit(1);
   }

    printf("sent%d bytes to %s\n", num_bytes,inet_ntoa(their_addr.sin_addr));
   close(sockfd);
    return0;
}

编译:
gcc server.c -o server
gcc client.c -o client
执行:
打开一终端执行:./server
打开另一终端执行:./client 127.0.0.1

 

相关文章推荐

嵌入式 获取网卡设备以及IP和MAC地址示例以及网络编程之ioctl小结

#include #include #include #include #include #include #include #include #ifdef SOLAR...
  • skdkjxy
  • skdkjxy
  • 2014年04月28日 15:57
  • 1823

嵌入式网络编程-自学篇

from : http://www.cnblogs.com/miosec/archive/2013/02/12/2910225.html 目的:想在路由器里做一个自动判断网络连接类型...

嵌入式网络编程

在Linux中的网络编程是通过socket接口来进行的。是一种文件描述符。socket也有一个类似于打开文件的函数调用,该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过s...

嵌入式linux的网络编程(5)--UDP Client程序设计

嵌入式linux的网络编程(4)--UDP Client程序设计
  • ce123
  • ce123
  • 2013年12月20日 16:02
  • 2952

Linux 网络编程——原始套接字实例:发送 UDP 数据包

IP报头

Linux IPv6网络编程之UDP实例

本文简单介绍了IPv6中的UDP socket编程,包括IPv6协议、地址在编程中的使用及转换。 server.c: #include #include #include #inclu...
  • szkbsgy
  • szkbsgy
  • 2016年01月31日 09:58
  • 1240

TCP/UDP 网络编程实例

TCP服务器: TCP_Server.c   #includestdio.h> #include stdlib.h> #include errno.h> #incl...
  • maopig
  • maopig
  • 2011年08月18日 23:43
  • 1491

【Linux网络编程】原始套接字实例:发送 UDP 数据包

以太网报文格式: 详细的说明,请看《MAC 头部报文分析》。 IP 报文格式: 详细的说明,请看《IP 数据报格式详解》。 ...

Linux网络编程下UDP洪水攻击实例介绍

1.概述 UDP攻击向目标主机的UDP端口发送大量的UDP报文,造成目标主机的端口堵塞,达到攻击的目的。建立多线程,利用原始套接字封装UDP与IP的首部,然后发送UDP报文,攻击目标主机. ...

网络编程 嵌入式

  • 2012年10月05日 10:37
  • 1.79MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 UDP网络编程实例
举报原因:
原因补充:

(最多只允许输入30个字)