IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程1(网络通信) -> 正文阅读

[网络协议]网络编程1(网络通信)

网络通信

? 底层遵循TCP/IP协议,在系统中以socket接口方式呈现

基于TCP协议的网络通信模型

服务端															客户端
创建socket对象										创建socket对象
准备通信地址(本机ip)+端口号				准备通信地址(目标公网ip)+端口号
绑定socket和通信地址								...
设置监听和排队的数量								...
等待客户端连接											连接服务端
分配新的socket对象+进程或者线程			 ...
接收请求													发送请求
响应请求													接收响应
关闭socket											 关闭socket

使用到的函数

int socket(int domain, int type, int protocol);
/*
功能:创建socket对象
domain:
		AF_INET							基于IPv4地址通信
type:
		SOCK_STREAM					数据流协议
返回值:成功返回socket描述符,失败返回-1
*/


//网络通信地址类型
#include<netinet/in.h>//【vim /usr/include/linux/in.h】
struct sockaddr_in {
  __kernel_sa_family_t  sin_family; 				//	domain写什么就填什么
  __be16        sin_port; 								  //	端口号(大端数据htons)
  struct in_addr    sin_addr;  						  //	IP地址(大端数据)

};
struct in_addr {
    __be32  s_addr;		//htonl
};

//大小端数据转换函数
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
//功能:把4字节的本地字节序转换成网络字节序(小端转大端)
uint16_t htons(uint16_t hostshort);
//功能:把2字节的本地字节序转换成网络字节序
uint32_t ntohl(uint32_t netlong);
//功能:把4字节的网络字节序转换成本地字节序
uint16_t ntohs(uint16_t netshort);
//功能:把2字节的网络字节序转换成本地字节序

//ipv4地址转换
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
//功能:把字符串格式的点分十进制的IP地址,转换成整数形式的IP地址(大端)
//例如:inet_addr("192.168.0.1");
char *inet_ntoa(struct in_addr in);
//功能:把整数形式的IP地址转换成字符串格式的点分十进制的IP地址

注意:send、recv函数是TCP协议通信时专用的数据发送、接收函数,但是也可以继续使用write、read函数

基于UDP协议的网络通信模型

接收者									发送者
创建socket						创建socket
准备通信地址					准备通信地址
绑定									...
接收请求							发送请求
响应请求							接收响应
关闭									关闭

使用到的函数

int socket(int domain, int type, int protocol);
/*
功能:创建socket对象
domain:
		AF_INET							基于IPv4地址通信
type:
		SOCK_DGRAM					数据报协议
返回值:成功返回socket描述符,失败返回-1
*/

//UDP协议专业的收发函数
#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);
/*
功能:发送数据,UDP专用
sockfd:socket描述符
buf:待发送数据的内存首地址
len:要发送的字节数
flags:是否阻塞,写0(阻塞)即可
dest_addr:通信目标的地址结构体
addrlen:地址结构体的字节数
返回值:成功发送的字节数
				-1		出现错误
				0			通信关闭
*/
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
/*
功能:接收数据,UDP专用
sockfd:socket描述符
buf:存储数据的缓冲区首地址
len:缓冲区的大小
flags:是否阻塞,写0即可
src_addr:用于存储发送者的地址结构体
addrlen:既是输入,也是输出
				1、告诉系统src_addr结构体的字节数
				2、返回实际接收到的发送者的地址结构体字节数
返回值:成功接收的字节数
				-1		出现错误
				0			通信关闭
*/
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 08:19:50  更:2021-09-19 08:20:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:41:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码