该博文参考了Linux C socket 编程之UDP一文,在这里表示感谢!

发送方:

/* * File:   udp_sender.c* Author: Henry** Created on 2019年5月29日17:08:13** 主要实现:发送20个文本消息,然后再发送一个终止消息*/#include <stdio.h>
#include <stdlib.h>#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>int power(int base, int exp);
int str_to_num(const char *s);int main(int argc, char** argv) {if(argc != 3){printf("Warning: Incorrect parameters! Correct usage like this:\nudp_sender ipAddress_of_udpServer port\n");exit(0);}int socket_descriptor; //套接口描述字int iter=0;char buf[80];struct sockaddr_in address;//处理网络通信的地址bzero(&address,sizeof(address));address.sin_family=AF_INET;//address.sin_addr.s_addr=inet_addr("192.168.2.1");//这里不一样address.sin_addr.s_addr=inet_addr(argv[1]);//这里不一样address.sin_port=htons(str_to_num(argv[2]));//创建一个 UDP socketsocket_descriptor=socket(AF_INET,SOCK_DGRAM,0);//IPV4  SOCK_DGRAM 数据报套接字(UDP协议)for(iter=0;iter<=20;iter++){/** sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" * 将格式化后的字符串存放到s当中*/sprintf(buf,"data packet with ID %d\n",iter);/*int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,const struct sockaddr FAR* to, int tolen);  * s:一个标识套接口的描述字。 * buf:包含待发送数据的缓冲区。  * len:buf缓冲区中数据的长度。 * flags:调用方式标志位。  * to:(可选)指针,指向目的套接口的地址。 * tolen:to所指地址的长度。  */sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));}sprintf(buf,"stop\n");sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));//发送stop 命令close(socket_descriptor);printf("Messages Sent,terminating\n");exit(0);return (EXIT_SUCCESS);
}int str_to_num(const char* s)
{int exp=0, n=0;const char *h = s;const char *t = NULL;for(;*h <'0' || *h >'9'; h++)  // 找到第一位数字;for(t=h; *t >='0' && *t <='9'; ++t)  // 找到最后一位数字;t--;while(t >= h){n += (*t - 48)*power(10, exp);t--;exp++;}return n;
}int power(int base, int exp)
{if( 0 == exp )return 1;return base*power(base, exp-1);
}

接收方:

/* * File:   udp_receiver.c* Author: Henry** Created on 2019年5月29日17:09:11** 主要实现:发送20个文本消息,然后再发送一个终止消息*/#include <stdio.h>
#include <stdlib.h>#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>int power(int base, int exp);
int str_to_num(const char *s);int main(int argc, char** argv) {if(argc != 2){printf("Warning: Incorrect parameters! Correct usage like this:\nudp_receiver port\n");exit(0);}int sin_len;char message[256];int socket_descriptor;struct sockaddr_in sin;printf("Waiting for data from sender \n");bzero(&sin,sizeof(sin));sin.sin_family=AF_INET;sin.sin_addr.s_addr=htonl(INADDR_ANY);sin.sin_port=htons(str_to_num(argv[1]));sin_len=sizeof(sin);socket_descriptor=socket(AF_INET,SOCK_DGRAM,0);bind(socket_descriptor,(struct sockaddr *)&sin,sizeof(sin));while(1){recvfrom(socket_descriptor,message,sizeof(message),0,(struct sockaddr *)&sin,&sin_len);printf("Response from server:%s\n",message);if(strncmp(message,"stop",4) == 0)     // 接受到的消息为 “stop”{printf("Sender has told me to end the connection.\n");break;}}close(socket_descriptor);exit(0);return (EXIT_SUCCESS);
}int str_to_num(const char* s)
{int exp=0, n=0;const char *h = s;const char *t = NULL;for(;*h <'0' || *h >'9'; h++)  // 找到第一位数字;for(t=h; *t >='0' && *t <='9'; ++t)  // 找到最后一位数字;t--;while(t >= h){n += (*t - 48)*power(10, exp);t--;exp++;}return n;
}int power(int base, int exp)
{if( 0 == exp )return 1;return base*power(base, exp-1);
}

Linux下C语言实现UDP Socket编程相关推荐

  1. Linux下C语言实现TCP Socket编程

    TCP协议: TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的.可靠的.基于字节流 ...

  2. Linux下基于C/C++的Socket编程基础

    什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程, ...

  3. linux下C语言套接字编程sockaddr和sockaddr_in的区别

    tcp建立后,我想linux的服务端可以为每个连接的ip地址分配编号,方便进行每个客户端进行数据交互.所以我要知道每个连接的ip地址. struct sockaddr和struct sockaddr_ ...

  4. linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家

    Linux UDP socket编程(UDP通讯模型): UDPClient + UDPService. Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用! ...

  5. 半双工通信是指c语言,Linux下C语言实现半双工的UDP通信

    ------------恢复内容开始------------ Linux下C语言实现半双工的UDP通信 1.单向通信:又称为单工通信,即只能有一个方向的通信而没有反方向的交互.无线电广播或有线电广播以 ...

  6. linux下c语言使用mac地址进行socket通信

    linux下c语言使用mac地址进行socket通信 server端: #include <unistd.h> #include <stdio.h> #include < ...

  7. linux c语言工具,Linux下C语言编程环境的工具.doc

    Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...

  8. Linux下C语言编程-进程的创建

    Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...

  9. linux+下c语言编程项目,精通UNIX下C语言编程与项目实践

    cc -I  //include 目录 -L //静态库目录?动态也可以 -l //小写L,接静态库名称?动态也可以 -DXXX='"XXFF"' //-D直接定义宏 -c 只编译 ...

最新文章

  1. Python 中更优雅的环境变量设置方案
  2. 10个关于人工智能和机器学习的有趣开源项目
  3. 【代码笔记】iOS-removeFromSuper
  4. webflux webclient DataBufferLimitException: Exceeded limit on max bytes to buffer
  5. 华为nova好不好 先看图
  6. [Abp 源码分析]权限验证
  7. LeetCode 1647. 字符频次唯一的最小删除次数(贪心)
  8. 回归指令_用一条指令在新款 Mac 上找回经典的开机启动声
  9. bzoj1048(记忆化搜索)
  10. 读书笔记 摘自:《硅谷钢铁侠:埃隆·马斯克的冒险人生》的笔记(作者: 【美】阿什利·万斯)
  11. 【单片机】keil 2032
  12. windows环境下curl 安装和使用
  13. 《Efficient Android Threading》Chapter 3---Threads on Android (Android中的线程)
  14. 21世纪语言教程5c,21世纪核心素养5C模型
  15. 【数据挖掘】关联规则和Apriori算法
  16. 【Linux】 浅谈 NCSI 及其在 Linux 上的实现
  17. Java、两点间距离
  18. hackthebox - frolic (考点: 信息搜集 ook解密 base解密 zip 解密 xxd解密 brainfuck解密 playsms安全)
  19. 【backtrader源码解析52】indicators部分代码解读(枯燥,仅供参考,源代码解析结束,后面会增加一个backtrader框架分析)
  20. 零知识证明学习(一)—— 初始零知识证明

热门文章

  1. springmvc与thymeleaf集成_晏无心_新浪博客
  2. 小学三年级计算机认识鼠标说课,认识鼠标说课稿.doc
  3. 攻防世界-ics-06详解
  4. 曼哈顿距离与切比雪夫距离及其相互转化
  5. Linux系统管理技术学习day2
  6. 学习的力度应该与需求目的相匹配
  7. oracle select @@identity,SQL区别@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT
  8. 中档计算机配置,请问现在怎么去配置高中低三种档次的电脑,配置系数分别是什么...
  9. #define时,ERROE: lvalue required as left operand of assignment
  10. 【python8】股票查询系统