TCP/IP(8)-UDP Server与UDP Client(linux套接字)

本文深入探讨了Linux环境下的UDP客户端和服务器端编程,包括socket创建、bind绑定、sendto发送及recvfrom接收数据的过程。还提到了UDP的connect函数及其区别于TCP的功能,并分析了UDP在流量控制方面的局限性,强调了丢包问题。
摘要由CSDN通过智能技术生成

上一篇文章已经讨论了linux套接字基于TCP的客户端和服务器端编程,这片文章详细讨论linux套接字基于UDP的客户端和服务器端编程。

UDP客户端服务器模式

UDP客户/服务器模式
UDP与TCP相比要简洁很多,UDP不需要listen,accept和connect过程。

1. socket函数创建套接字

#include <sys/types.h>
#include <sys/socket.h>
sockfd = socket(AF_INET, SOCK_DGRAM, 0);

UDP是数据报的形式,因此在创建套接字时,是SOCK_DGRAM,这是与TCP不同的地方。

2. bind函数,绑定服务器地址到套接字上

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

bind函数与TCP的使用相同,将服务器的知名端口号和IP地址绑定到服务器套接字地址上,IP地址可能有多个。

3. sendto函数,发送数据给指定地址

#include <sys/types.h>
#include <sys/socket.h>

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

sendto函数比send函数多出两个参数,一个是目的地址,一个是地址长度。告诉客户端发送给哪个IP地址和哪个端口号。

3. recvfrom函数,接收数据

#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

recvfrom函数比recv函数多出两个参数,相当于TCP的accept函数,告诉我们是谁发送了数据过来。

服务端程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值