创建一个UDP口的服务端,其代码如下:

#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define MAXLINE 128int udp_server(const char *host, const char *serv, socklen_t *addrlenp)
{int sockfd, n;struct addrinfo hints, *res, *ressave;bzero(&hints, sizeof(hints));  hints.ai_flags = AI_PASSIVE;   hints.ai_family = AF_UNSPEC;   hints.ai_socktype = SOCK_DGRAM;    if ((n = getaddrinfo(host, serv, &hints, &res)) != 0) {printf("udp_server error for %s,%s:%s\n", host, serv, gai_strerror(n));return -1;}ressave = res;do {sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);if (sockfd < 0) continue;if (bind(sockfd, res->ai_addr, res->ai_addrlen) == 0) break;close(sockfd);} while ((res = res->ai_next) != NULL);if (res == NULL) {printf("udp_server error for %s,%s\n", host, serv);return -1;}freeaddrinfo(ressave);if (addrlenp) *addrlenp = res->ai_addrlen;return sockfd;}char *sock_ntop(const struct sockaddr* sa, socklen_t len)
{char portstr[7];static char str[MAXLINE + 1];switch (sa->sa_family) {case AF_INET:{struct sockaddr_in *sin = (struct sockaddr_in*)sa;if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL) return NULL;if (ntohs(sin->sin_port) != 0) {snprintf(portstr, sizeof(portstr), ":%d", ntohs(sin->sin_port));strcat(str, portstr);}return str;}}return NULL;
}int main(int argc, char **argv)
{int sockfd;ssize_t n;char buff[MAXLINE];time_t ticks;socklen_t addrlen, len;struct sockaddr *cliaddr;if (argc == 2) sockfd = udp_server(NULL, argv[1], &addrlen);else if (argc == 3) sockfd = udp_server(argv[1], argv[2], &addrlen);else {printf("usage:exename [<host>] <service or port>\n");return -1;}cliaddr = malloc(addrlen);for (;;) {len = addrlen;n = recvfrom(sockfd, buff, MAXLINE, 0, cliaddr, &len);printf("datagram form %s\n", sock_ntop(cliaddr, len));ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));sendto(sockfd, buff, strlen(buff), 0, cliaddr, len);}
}

输出为:

网络编程学习笔记(udp_server函数)相关推荐

  1. 网络编程学习笔记(shutdown函数)

    终止网络连接的正常方法是close,但close有两个限制,可由shutdown来避免 1.close将描述字的访问计数减1,仅在此计数为0时才关闭套接口.用shutdown可以激发TCP的正常连接终 ...

  2. 网络编程学习笔记(socketpair函数)

    socketpair函数建立一对相互连接的套接口,这个函数只对Unix域套接口适用,其定义如下: #include <sys/socket.h> int socketpair(int fa ...

  3. 网络编程学习笔记(getnameinfo函数)

    这个函数与getaddrinfo互补,它以一个套接口地址为参数,返回一个描述主机的字符串和一个描述服务的字符串.其函数原型如下: #include <netdb.h> int getnam ...

  4. 网络编程学习笔记(udp_client函数)

    创建一个未连接的UDP套接口的客户函数,其代码如下: #include <netdb.h> #include <sys/socket.h> #include <netin ...

  5. 网络编程学习笔记(getaddrinfo函数)

    函数getaddrinfo在库函数中隐藏了所有协议依赖性.应用 程序只需要处理由getaddrinfo填写的套接口地址结构.其函数原型为: #include <netdb.h> int g ...

  6. 网络编程学习笔记(uname函数)

    函数uname返回当前主机的名字.经常与gethostbyname一起用来确定本地主机的IP地址.其原型为: #include <sys/utsname.h> int uname(stru ...

  7. 网络编程学习笔记(gethostbyaddr函数)

    函数gethostbyaddr取一个二进制的IP地址并试图找到相应于此地址的主机名,与gethostbyname的行为恰好相反.gethostbyname感兴趣的是h_name 其原型为: #incl ...

  8. 网络编程学习笔记(gethostbyname2函数与IPv6支持)

    其原型为: #include <netdb.h> struct hostent * gethostbyname2(const char *hostname, int family); 成功 ...

  9. 网络编程学习笔记(gethostbyname函数)

    #include <netdb.h> struct hostent* gethostbyname(const char* hostname); 成功,返回非空指针,出错返回空指针,同时设置 ...

最新文章

  1. web 前端常用组件【06】Upload 控件
  2. unable to contact ip driver
  3. HDU 2704 Bulletin Board
  4. 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)
  5. 什么场景要用@bean_终于明白为什么要加 final 关键字了!
  6. Strings in the Pocket
  7. JQuery实现动态插入HTML模块
  8. 这个世界太小了,刚才我们老师搞块板给我,叫我弄个android上去,我发现核心板是sate210——O(∩_∩)O~...
  9. python写入文件中文乱码_记一次python写入txt文件正常,但是写入csv文件中文乱码问题...
  10. 都兰县第一中学计算机,都兰县第一中学教案.doc
  11. 前端学习(3288):react hook state-hook
  12. php业务的适用场景,根据业务场景寻找合适解决方案(PHP)?
  13. 吉大计算机学院刘淑芬,刘淑芬-吉林大学计算机科学与技术学院
  14. 字节跳动正测试元宇宙社交APP“派岛”
  15. B. Creating the Contest(水题)
  16. [UIKit学习]00.关于前置知识(storyboard,UIViewController,类扩展,项目属性)
  17. 技术书籍也香艳——《Head Fisrt 设计模式》
  18. 图像处理(三)——中国传统工艺画风格的图像转换应用
  19. Clickhouse 分析分布式表的各类指标
  20. 本地项目与Git项目关联

热门文章

  1. 跪求AI编程语言--纯中文代码
  2. sql server image字段的转换
  3. A-Grade Browser By Yahoo
  4. python画图表用引用数据_如何在python pandas中对数据帧使用按引用传递
  5. 计算机科学与技术python方向是什么意思-2020年西京学院计算机科学与技术专业专业介绍...
  6. 下列哪个不是目前python里的内置模块-python中那些小众但有用的内置模块
  7. 安卓python编辑器-有了这款编辑器,随时随地都能愉快的学习python!
  8. python读什么英文-Python常用英文单词有哪些?
  9. python 制作gif-怎样用Python制作好玩的GIF动图
  10. python处理excel表格实例-python2 对excel表格操作完整示例