C语言UDP socket编程
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编程相关推荐
- Go语言TCP Socket编程
2019独角兽企业重金招聘Python工程师标准>>> Go语言TCP Socket编程 Golang的 主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不 ...
- linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家
Linux UDP socket编程(UDP通讯模型): UDPClient + UDPService. Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用! ...
- python(18):网络编程(七层协议+tcp/udp+socket编程)
Python作为最热门的语言,使我们每个人应该学习的一门技术! 本文针对初学者,我会用最容易的方式告诉你如何入门python! 一.基本网络概念 1.计算机之间如何进行联机 早期: 以太网:局域网与交 ...
- 转Go语言TCP Socket编程
授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...
- Java TCP/UDP socket 编程流程总结
最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就 ...
- socket c语言 AF_TIPC,socket编程 send() recv() sendto() recvfrom()
socket编程 send() recv() sendto() recvfrom() int socket( int af, int type, int protocol); af: 指定一个协议簇( ...
- 【Java】UDP Socket编程案例——文件传输聊天工具
UDP(用户数据报协议)就像日常生活中的邮件投递,是不能保证可靠地寄到目的地.UDP是无连接的,对系统资源的要求较少,UDP可能丢包,也不保证数据顺序.但是对于网络游戏和在线视频等要求传输快,实时性高 ...
- Linux下C语言实现UDP Socket编程
该博文参考了Linux C socket 编程之UDP一文,在这里表示感谢! 发送方: /* * File: udp_sender.c* Author: Henry** Created on 2019 ...
- 学习初步练习基于c语言的socket编程
一.理解socket 套接字 应用进程跨网络的通信需要用到socket套接字实现,在TCP/IP协议中,"IP地址+TCP或UDP"唯一的标识了网络通信中的一个进程,这也就叫做一个 ...
- tcp/udp socket编程异同
一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 ...
最新文章
- 华为手机如何升级鸿蒙系统_华为手机怎么升级鸿蒙系统?答案来了
- 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)
- linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈
- php-ast 开源,PHP AST学习 - osc_ryjlu6z2的个人空间 - OSCHINA - 中文开源技术交流社区...
- c#中关于协变性和逆变性(又叫抗变)帮助理解
- java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...
- deepin安装bochs2.6.2_深度Deepin系统中wine4.0.1源编辑安装
- Java集合(一) —— ArrayList
- 数据探索很麻烦?推荐一款史上最强大的特征分析可视化工具:yellowbrick
- python类的继承举例_python类的继承实例详解
- Namesilo域名注册流程
- HTTP POST 参数格式
- 设置mathtype章节号显示与隐藏
- 奇怪,发不出去,只能截图发了
- 最多只需三步,彻底解决VB6中不能加载MSCOMCTL.OCX的提示
- 病原微生物高通量测序:第二节 应用场景
- 损失函数理解汇总,结合PyTorch和TensorFlow2
- 开篇之作之——阅读与思考
- Java中创建线程的三种方式
- ElasticSearch搭建集群详解
热门文章
- php俄语包,俄语资源汇总 - 俄语 | Russian | Pусский - 声同小语种论坛 - Powered by phpwind...
- WangEdit富文本编辑器图标修改
- 绘图技术采用计算机什么软件,计算机绘图好用的软件
- 清华大学计算机考研总结,2020考研清华大学计算机考研考试科目总结
- NFine极速WEB + ORM框架源码
- java 普元_也谈普元 - 狂奔 lion - BlogJava
- 【Python】numpy矩阵运算大全
- java 需求文档_java 项目需求文档要怎么写?
- XeThru Sensors SW Module Connector-matlab
- python实例代码爬虫_python 网络爬虫实例代码