UDP/TCP服务器的简易实现

本文介绍了UDP协议以及网络字节序的概念,详细阐述了大端模式和小端模式的区别,并强调了在网络数据传输中TCP/IP协议规定使用大端字节序。在UDP服务器和客户端的实现过程中,提到了UDP套接字调用connect函数的不同之处,最后给出了UDP服务器和客户端的代码示例。
摘要由CSDN通过智能技术生成

UDP协议:udp协议中文名称叫用户数据报协议

我们首先回忆一下大端和小端的问题:

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

网络字节序:我们知道内存存储数据多字节数据相对于内存地址来说有大端和小端之分,磁盘文件的多字节数据相对于文件中的偏移地址也有大端和小端之分,网络数据同样也有大端和小端之分,那么我们就应该用这些定义网络数据流的地址:

  • 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出
  • 接收主机把从网络上接收到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序进行保存的
  • 网络数据流的地址规定:先发出的数据是弟低地址,后发出的数据是高地址
  • TCP/IP协议规定:网络数据流应采用大端字节序
  • 不管主机是大端机还是小端机都要按照TCP/IP规定的网络字节序收发数据
  • 如果发送机是小端机那么就要转化成大端字节序

UDP套接字调用connect(不同于TCP):没有三路握手过程,内核只是检查是否存在错误,记录对端IP地址和端口号。

下面介绍一下这些函数:

int socket(int domain, int type, int protocol);//创建socket文件描述符

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);//绑定端口号

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


几种网络协议的地址格式:

下面我们来看一下UDP服务器的代码实现:

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

/*
 * UDP网络聊天程序--服务器端
 *      1. 创建socket--建立与网卡驱动的联系         socket
 *      2. 为so
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值