实验二 UDP 通信实验

本文档详述了一个UDP通信实验,包括实验目的、设计、过程及分析。实验涉及Winsock API,要求实现双方能相互发送数据并在收到特定消息时退出。通过服务器和客户端程序的调试,展示了UDP数据报套接字编程,强调了与TCP的区别,如可以在不调用sendto()前调用recvfrom()。实验还包括多客户端通信和地址端口的动态调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的

        进一步理解 Winsock API 的调用方法。
        了解 UDP 协议的工作原理。
        掌握 UDP 服务端程序和客户端程序的编写流程。
        熟悉程序的调试方法。

二、实验设计

        1、背景知识 
        Winsock 编程模型 Winsock 编程的主要模型分为流套接字编程模型和数据报套接字编程模型两类,主要区别在于:前者提供双向的、有序的、无重复并且无记录边界的数据流服务,即采用有连接的 数据传输服务,保证数据可靠到达;后者也支持双向数据流,但不能保证数据的可靠、有序和无重复,它保留了记录边界,是一种无连接、不可靠的数据传输模型。
        数据报套接字编程模型
        数据报套接字使用 UDP 协议进行数据的传输,是一种无连接的数据传输模型,编程过程相对简单,采用客户/服务器(C/S)结构进行设计。
        在数据报套接字编程模型中,客户端发送数据(也称发送端),服务器端接收数据(也称接收端)。实际上,由于数据报套接字编程模型也支持双向数据传递,因此,服务器端和客户端的概念已经比较模糊。为了说明数据报套接字编程模型的工作原理,这里仍然沿用这两个概念。
        数据报套接字的服务进程和客户进程不需要在通信前建立连接,仅需要创建各自的套接 字,因此程序设计过程相当简单,简述如下:
        接收端:(1)、创建数据报套接字;(2)、绑定本机地址和端口;(3)、等候接收数据;(4)、使用 完成后关闭套接字。
        发送端:(1)、创建数据报套接字;(2)、向指定地址和端口发送数据;(3)、使用完成后关闭套接字。
        数据报套接字编程使用的函数
        (1) 创建套接字函数 socket() SOCKET socket(int af,int type,int protocol); 
        由于采用数据报套接字进行数据传输,因此 type 参数必须设置为 SOCK_DGRAM, protocol 参数必须设置为 IPPROTO_UDP 
        (2) 绑定本地地址到所创建的套接字函数 bind()
int bind(SOCKET s,const struct sockaddr* name,int namelen);
        在实际编程时可以省略该函数,系统会自动绑定 
        (3) 接收数据函数 recvfrom() 
int recvfrom(SOCKET s,char* buf,int len,int flags, struct sockaddr* from,int* fromlen); 
        (4) 发送数据函数 sendto() 
int sendto(SOCKET s,const char* buf,int len,int flags, const struc
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值