UDP编程流程(UDP客户端、服务器互发消息流程)

一、UDP编程流程

1.1、 UDP概述

UDP,即用户数据报协议,是一种面向无连接的传输层协议。相比于TCP协议,UDP具有以下特点:

  1. 速度较快:由于UDP不需要建立连接和进行复杂的握手过程,因此在传输数据时速度稍快于TCP协议。
  2. 适用于简单的请求/应答应用程序:对于一些简单的、对可靠性要求不高的应用程序,如DNS查询和SNMP请求,UDP能够提供高效的传输服务。
  3. 不适用于海量数据传输:由于UDP不提供可靠的数据传输机制,因此在进行大数据传输时容易出现丢包和乱序的情况,不建议使用UDP进行此类传输。
  4. 广播和多播应用必须使用UDP:UDP支持广播和多播传输,因此对于需要进行广播和多播的应用,如视频直播和组播通信,必须使用UDP协议。

UDP应用:

UDP协议被广泛应用于各种网络应用中,包括但不限于以下几种:

  • DNS(域名解析):DNS使用UDP进行域名解析请求和响应的传输,以提高查询速度。
  • NFS(网络文件系统):NFS使用UDP进行文件操作请求和响应的传输,以提高文件访问速度。
  • RTP(实时传输协议):RTP使用UDP进行实时音视频数据的传输,以减少延迟。

此外,一些实时性要求较高的应用,如在线游戏和VoIP通话,也会选择使用UDP协议来减少延迟,提高用户体验

1.2、网络编程接口socket

Socket,也被称为"套接字",是网络编程中用于实现不同主机上进程间通信的一种技术。它提供了一种将网络通信抽象为文件操作的接口,使得程序员可以通过简单的函数调用来实现复杂的网络通信功能。

Socket的特点

  1. 文件描述符:Socket是一种文件描述符,它代表了一个通信管道的端点。通过Socket,我们可以像操作文件一样,使用read、write、close等函数来发送和接收网络数据。
  2. 通信端点:Socket是网络通信的端点,每个Socket都有一个唯一的地址,通过这个地址,我们可以与远程主机上的Socket进行通信。
  3. 网络数据操作:通过Socket,我们可以方便地进行网络数据的发送和接收。Socket提供了丰富的函数接口,如send、recv、sendto、recvfrom等,用于各种网络数据操作。
  4. Socket函数:要获得一个Socket,我们需要调用socket()函数。该函数返回一个Socket描述符,用于后续的网络通信操作。

Socket的分类

根据使用的协议和通信方式的不同,Socket可以分为以下几种类型:

  • SOCK_STREAM:流式套接字,用于TCP协议。它提供了可靠的、面向连接的通信方式,数据以流的形式传输,可以保证数据的可靠性和顺序性。
  • SOCK_DGRAM:数据报套接字,用于UDP协议。它提供了不可靠、无连接的通信方式,数据以数据报的形式传输,不保证数据的可靠性和顺序性。
  • SOCK_RAW:原始套接字,用于其他层次的协议操作。它允许直接访问网络层数据,可以用于实现自定义的网络协议。

1.3 UDP编程C/S架构

UDP网络编程流程:

服务器: 创建套接字 socket( )

                将服务器的ip地址、端口号与套接字进行绑定 bind( )

                接收数据 recvfrom()

                发送数据 sendto()

客户端:  创建套接字 socket()

                发送数据 sendto()

                接收数据 recvfrom()

                关闭套接字 close() 

二、UDP编程-创建套接字 

2.1 创建socket套接字

#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
功能:
    创建一个套接字,返回一个文件描述符
参数:
    domain:通信域,协议族
    AF_UNIX 本地通信
    AF_INET ipv4网络协议
    AF_INET6 ipv6网络协议
    AF_PACKET 底层接口
type:
  套接字的类型
    SOCK_STREAM 流式套接字(tcp)
    SOCK_DGRAM 数据报套接字(udp)
    SOCK_RAW 原始套接字(用于链路层)
protocol:
    附加协议,如果不需要,则设置为0
返回值:
    成功:文件描述符
    失败:-1

特点 

  •  创建套接字时,系统不会分配端口
  •  创建的套接字默认属性是主动的,即主动发起服务的请求;当作为服务器时,往往需要修改为被动的
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值