Linux网络编程——UDP编程

这篇具有很好参考价值的文章主要介绍了Linux网络编程——UDP编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

1、UDP通信协议,服务器端和客户端无需建立连接,只需要知道对方套接字的地址信息就可以发送数据
2、UDP通信流程图:
Linux网络编程——UDP编程

一、udp编程相关函数

1、socket函数

功能:创建套接字并返回套接字描述符

头文件:
#include<sys/socket.h>
函数原型:
int socket(int family,int type,int protocol)
参数:
family:协议族
		AF_INET:IPv4协议
		AF_INET6:IPv6协议
type:套接字类型
		SOCK_STREAM:流式套接字(tcp)
		SOCK_DGRAM:数据报套接字(udp)
protocol:0
返回值:
非负套接字描述符

2、bind函数

功能:将套接字与IP地址和端口号绑定

头文件:
#include<sys/socket.h>
函数原型:
int bind(int sockfd,(struct sockaddr *)my_addr,int addrlen)
参数:
sockfd:套接字描述符
my_addr:绑定的地址
addrlen:地址长度

3、sendto函数

功能:发送数据

头文件:
#include<sys/socket.h>
函数原型:
int send(int sockfd,const void *buf,int len,int flags,const struct sockaddr *to,int tolen);
参数:
sockfd:套接字描述符
buf:发送缓存区的地址
len:发送数据的长度
flags:一般为0
to:接收方套接字的ip地址和端口号
tolen:地址长度
返回值:
实际发送的字节数

4、recvfrom函数

功能:接收数据

头文件:
#include<sys/socket.h>
函数原型:
int recv(int sockfd,void *buf,int len,unsigned int flags,const struct sockaddr *from,int fromlen)
参数:
sockfd:套接字描述符
buf:存放接收数据的缓存区的地址
len:接收数据的长度
flags:一般为0
from:发送方的ip地址和端口号
fromlen:地址长度
返回值:
实际接收的字节数

5、close函数

功能:关闭套接字

头文件:
#include<sys/socket.h>
函数原型:
int close(int sockfd)
参数:
sockfd:套接字描述符

二、实际案例

1、代码功能:两个进程可以相互收发数据
2、实现需要开启两个终端,同时运行相同的代码,一端发送,一端接收

#include <arpa/inet.h>
#include <sys/socket.h>
#include <pthread.h>
#include <stdio.h>
struct sockaddr_in my_addr;//定义本段代码套接字
struct sockaddr_in to_addr;//定义另一端代码套接字
int fd;//定义套接字描述符
void *send_fun(void *p)//处理发送功能的线程函数
{
	char buf[100] = { 0 };
	while(1)
	{
		gets(buf);//输入字符串
		sendto(fd, buf, 100, 0, (struct sockaddr*)&to_addr, 16);//发送数据
	}
}
int main(int argc, char *argv[])
{
	pthread_t id;//线程id
	fd = socket(AF_INET, SOCK_DGRAM, 0);//套接字fd赋值
	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(atoi(argv[3]));	//argv[3] 自己的端口号  9999
	my_addr.sin_addr.s_addr = htonl(INADDR_ANY);	//inet_addr("192.168.31.252");  INADDR_ANY 得到当前计算机的ip地址
	bind(fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));//绑定自己的ip地址和端口号

	to_addr.sin_family = AF_INET;
	to_addr.sin_port = htons(atoi(argv[2]));	//argv[2]对方的端口号  8888
	to_addr.sin_addr.s_addr = inet_addr(argv[1]);	//argv[1]对方的ip地址  127.0.0.1

	pthread_create(&id, NULL, send_fun,NULL);//创建线程
	while(1)
	{
		char buf[100];
		int len = 16;
		recvfrom(fd, buf, 100, 0, (struct sockaddr *)&to_addr, &len);//接收数据
		printf("from %d:%s\n", ntohs(to_addr.sin_port), buf);//输出对方的IP地址和端口号
	}	
}

结果展示
可以实现相互发送数据的两端:
1、127.0.0.1是环回地址
2、8888和9999是两端套接字地址的端口号
Linux网络编程——UDP编程
Linux网络编程——UDP编程

总结

1、UDP通信是不可靠的,其中一点是没有建立连接机制,使用ip地址进行数据的传输
2、UDP和TCP主要在于sendto和recvfrom两个函数,这两个函数参数包括了对方的ip地址和端口号,这点与TCP通信区别较大文章来源地址https://www.toymoban.com/news/detail-418177.html

到了这里,关于Linux网络编程——UDP编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【探索Linux】—— 强大的命令行工具 P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)

    在上一篇文章中,我们深入探讨了Linux网络编程的基石——套接字(Socket)的概念以及相关的编程接口。我们了解到,套接字是网络通信过程中端与端之间数据交换的关键抽象概念,它提供了一套丰富的编程接口,使得开发者能够在应用层直接进行网络通信的开发。不仅如此

    2024年03月16日
    浏览(75)
  • Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字

    文章目录: 一:线程池模块分析 threadpool.c 二:UDP通信 1.TCP通信和UDP通信各自的优缺点 2.UDP实现的C/S模型 server.c client.c 三:套接字  1.本地套接字 2.本地套 和 网络套对比 server.c client.c threadpool.c   server.c client.c server.c client.c

    2024年02月11日
    浏览(66)
  • Linux网络编程:Socket服务器和客户端实现双方通信

    目录 一,什么是网络编程 二,为什么使用端口号 三,TCP协议与UDP协议 ①TCP(传输控制协议) ②UDP(用户数据报协议,User Data Protocol) ③总结归纳 四,Socket服务器和客户端的开发流程 五,服务器和客户端相关API说明 ①socket()函数 ②bind()函数 ③listen()函数 ④accept()函数 ⑤客户端

    2024年02月11日
    浏览(71)
  • linux【网络编程】之HTTPS协议,一文了解HTTPS是如何保证通信安全的

    在上篇文章中我们了解到什么事HTTP协议,HTTP协议内容都是按照⽂本的⽅式明⽂传输的.这就导致在传输过程中出现⼀些被篡改的情况,本期我们来探讨一下HTTPS协议。 HTTPS( 超文本传输安全协议 )也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层. HTTPS:默认端口与

    2024年02月08日
    浏览(61)
  • linux【网络编程】TCP协议通信模拟实现、日志函数模拟、守护进程化、TCP协议通信流程、三次握手与四次挥手

    Tcp通信模拟实现与Udp通信模拟实现的区别不大,一个是面向字节流,一个是面向数据报;udp协议下拿到的数据可以直接发送,tcp协议下需要创建链接,用文件描述符完成数据的读写 1.1.1 接口认识 1.1.1.1 listen:监听socket 1.1.1.2 accept:获取连接 通信就用accept返回的文件描述符,

    2024年02月06日
    浏览(54)
  • Linux网络编程:socket、客户端服务器端使用socket通信(TCP)

    socket(套接字),用于网络中不同主机间进程的通信。 socket是一个伪文件,包含读缓冲区、写缓冲区。 socket必须成对出现。 socket可以建立主机进程间的通信,但需要协议(IPV4、IPV6等)、port端口、IP地址。          (1)创建流式socket套接字。                 a)此s

    2024年02月11日
    浏览(65)
  • [C++ 网络协议编程] UDP协议

    目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 主要区别: TCP和UDP的主要区别是,TCP具有流控制机制,而UDP没

    2024年02月12日
    浏览(43)
  • Python网络编程之UDP协议

    Hello,大家好。本期来和大家一起学习一下网络编程UDP的相关知识。 ip ip地址:用来在网络中标记一台电脑,在本地局域网上是唯一的。 查看电脑ip地址:ipconfig(win)/ifconfig(linux/mac) 端口 端口:设备与外界通讯交流的出口 一共有65536个(0 - 65535) 端口 知名端口是众所周知的

    2024年02月03日
    浏览(38)
  • 【网络编程】TCP,UDP协议详解

    小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~   目录 前言 TCP协议 TCP协议特点 TCP协议通信场景 TCP协议的几个重要机制 一、

    2023年04月19日
    浏览(53)
  • 网络编程(TCP与UDP协议)

    Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库, 程序

    2023年04月27日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包