C语言UDP socket编程

UDP 服务器步骤如下:

  • 1.创建等链接套接字fd=socket()
  • 2.绑定待链接套接字bind(fd,服务器ip和端口)
  • 3.等待信息recvfrom(fd,对端地址)

UDP 客户端步骤如下:

  • 1.创建待连接套接字fd=scoket()
  • 2.发送信息sendto(fd,服务器ip和端口)

UDP服务器

int main(int argc, char const *argv[])
{// 创建一个UDP套接字int fd = Socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in srvaddr;socklen_t len = sizeof(srvaddr);bzero(&srvaddr, len);srvaddr.sin_family = AF_INET;srvaddr.sin_port = htons(atoi(argv[1]));srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);// 绑定本地IP和端口Bind(fd, &srvaddr, len);// 迭代服务器char buf[SIZE];while(1){bzero(buf, SIZE);recvfrom(fd, buf, SIZE, 0, NULL, NULL);printf("%s", buf);}return 0;
}

UDP客户端

int main(int argc, char const *argv[])
{// 创建一个UDP套接字int fd = Socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in srvaddr;socklen_t len = sizeof(srvaddr);bzero(&srvaddr, len);srvaddr.sin_family = AF_INET;//srvaddr.sin_addr.s_addr = inet_addr("192.168.0.166");  inet_pton(AF_INET, arg[1], &srvaddr.sin_addr);srvaddr.sin_port = htons(atoi(argv[2]));char buf[SIZE];while(1){bzero(buf, SIZE);fgets(buf, SIZE, stdin);sendto(fd, buf, strlen(buf), 0,(struct sockaddr *)&srvaddr, len);}return 0;
}

socket API做了如下封装


ssize_t Write(int fildes, const void *buf, size_t nbyte)
{ssize_t retval = write(fildes, buf, nbyte);if(retval == -1){perror("write() error");}return retval;
}ssize_t Read(int fildes, void *buf, size_t nbyte)
{int ret = read(fildes, buf, nbyte);if(ret == -1){perror("read() failed");}return ret;
}int Bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{int ret = bind(sockfd, addr, addrlen);if(ret == -1){perror("bind() failed");}return ret;
}int Listen(int sockfd, int backlog)
{int ret = listen(sockfd, backlog);if(ret == -1){perror("listen() failed");}return ret;
}int Accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{int ret = accept(sockfd, addr, addrlen);if(ret == -1){perror("accept() failed");}return ret;
}int Connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{int ret = connect(sockfd, addr, addrlen);if(ret == -1){perror("connect() failed");}return ret;
}int Socket(int domain, int type, int protocol)
{int sockfd = socket(domain, type, protocol);if(sockfd == -1){perror("socket() error");}return sockfd;
}int Setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen)
{int retval = setsockopt(sockfd, level, optname, optval, optlen);if(retval == -1){perror("setsockopt() error");}return retval;
}int Select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout)
{int ret = select(nfds, readfds, writefds, exceptfds, timeout);if(ret == -1){perror("select() failed");}return ret;
}

C语言UDP socket编程相关推荐

  1. Go语言TCP Socket编程

    2019独角兽企业重金招聘Python工程师标准>>> Go语言TCP Socket编程 Golang的 主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不 ...

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

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

  3. python(18):网络编程(七层协议+tcp/udp+socket编程)

    Python作为最热门的语言,使我们每个人应该学习的一门技术! 本文针对初学者,我会用最容易的方式告诉你如何入门python! 一.基本网络概念 1.计算机之间如何进行联机 早期: 以太网:局域网与交 ...

  4. 转Go语言TCP Socket编程

    授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...

  5. Java TCP/UDP socket 编程流程总结

    最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就 ...

  6. socket c语言 AF_TIPC,socket编程 send() recv() sendto() recvfrom()

    socket编程 send() recv() sendto() recvfrom() int socket( int af, int type, int protocol); af: 指定一个协议簇( ...

  7. 【Java】UDP Socket编程案例——文件传输聊天工具

    UDP(用户数据报协议)就像日常生活中的邮件投递,是不能保证可靠地寄到目的地.UDP是无连接的,对系统资源的要求较少,UDP可能丢包,也不保证数据顺序.但是对于网络游戏和在线视频等要求传输快,实时性高 ...

  8. Linux下C语言实现UDP Socket编程

    该博文参考了Linux C socket 编程之UDP一文,在这里表示感谢! 发送方: /* * File: udp_sender.c* Author: Henry** Created on 2019 ...

  9. 学习初步练习基于c语言的socket编程

    一.理解socket 套接字 应用进程跨网络的通信需要用到socket套接字实现,在TCP/IP协议中,"IP地址+TCP或UDP"唯一的标识了网络通信中的一个进程,这也就叫做一个 ...

  10. tcp/udp socket编程异同

    一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 ...

最新文章

  1. 华为手机如何升级鸿蒙系统_华为手机怎么升级鸿蒙系统?答案来了
  2. 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)
  3. linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈
  4. php-ast 开源,PHP AST学习 - osc_ryjlu6z2的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. c#中关于协变性和逆变性(又叫抗变)帮助理解
  6. java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...
  7. deepin安装bochs2.6.2_深度Deepin系统中wine4.0.1源编辑安装
  8. Java集合(一) —— ArrayList
  9. 数据探索很麻烦?推荐一款史上最强大的特征分析可视化工具:yellowbrick
  10. python类的继承举例_python类的继承实例详解
  11. Namesilo域名注册流程
  12. HTTP POST 参数格式
  13. 设置mathtype章节号显示与隐藏
  14. 奇怪,发不出去,只能截图发了
  15. 最多只需三步,彻底解决VB6中不能加载MSCOMCTL.OCX的提示
  16. 病原微生物高通量测序:第二节 应用场景
  17. 损失函数理解汇总,结合PyTorch和TensorFlow2
  18. 开篇之作之——阅读与思考
  19. Java中创建线程的三种方式
  20. ElasticSearch搭建集群详解

热门文章

  1. php俄语包,俄语资源汇总 - 俄语 | Russian | Pусский - 声同小语种论坛 - Powered by phpwind...
  2. WangEdit富文本编辑器图标修改
  3. 绘图技术采用计算机什么软件,计算机绘图好用的软件
  4. 清华大学计算机考研总结,2020考研清华大学计算机考研考试科目总结
  5. NFine极速WEB + ORM框架源码
  6. java 普元_也谈普元 - 狂奔 lion - BlogJava
  7. 【Python】numpy矩阵运算大全
  8. java 需求文档_java 项目需求文档要怎么写?
  9. XeThru Sensors SW Module Connector-matlab
  10. python实例代码爬虫_python 网络爬虫实例代码