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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP/IP小结 -> 正文阅读

[网络协议]TCP/IP小结

服务器端

1、创建套接字

#include <sys/socket.h>
int socket(int domain,int type,int protocol) //成功时返回文件描述符,失败时返回-1

domain:协议族 PF_INET/PF_INET6
type:数据传输方式 SOCK_STRRAM/SOCK_DGRAM 
protocol;具体指定协议信息 IPPROTO_TCP

2、分配ip地址和端口号

#include <sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen) //成功时返回0,失败时返回-1
sockfd:要分配地址的套接字文件描述符
myaddr:存有地址信息的结构体变量地址
addrlen:第二个结构体变量的长度

struct sockaddr 
{
	sa_family_t    sin_family;
	char           sa_data[14]; //地址信息
}
需要进行地址转换
/*
	struct sockaddr_in serv_addr;
	(struct sockaddr*)&serv_addr
*/

struct sockaddr_in
{
	sa_family_t    sin_family; //地址族
	uint16_t       sin_port; //16位tcp/udp端口号
	struct in_addr sin_addr; //32位ip地址
	char           sin_zero[8]; //不使用
}
struct in_addr
{
	in_addr_t      s_addr; //32位ip地址
}
/*
将字符串地址转换为整数,再转换为网络字节序(大端序)
serv_addr.sin_port=htonl(INADDR_ANY);//INADDR_ANY自动获取服务器端的ip地址
*/


3、设置套接字为可接收状态

#include <sys/socket.h>
int listen(int sock,int backlog) //成功时返回0,失败时返回-1
sock:希望进入连接请求的套接字文件描述符
backlog:队列长度

4、受理连接请求

#include <sys/socket.h>
int accept(int sock,struct sockaddr *addr,socklen_t *addrlen) //成功时返回文件描述符,失败时返回-1
sock 服务器套接字文件描述符
addr:保存客户端地址信息的变量地址
addrlen:第二个参数addr结构体长度

客户端

1、创建套接字

#include <sys/socket.h>
int socket(int domain,int type,int protocol) //成功时返回文件描述符,失败时返回-1

2、发送连接请求

#include <sys/socket.h>
int connect(int sockfd,struct sockaddr *serv_addr,socklen_t addrlen) //成功时返回0,失败时返回-1
sock 客户端套接字描述符
servaddr 保存目标服务器地址
addrlen:第二个结构体参数的值

客户端的ip地址调用connect函数自动分配

文件操作

1、将数据写入文件

#include <inistd.h>
ssize_t write(int fd,const void* buf,size_t nbytes) //成功时返回写入的字节数,失败时返回-1

2、读取文件中的数据

#include <inistd.h>
ssize_t read(int fd,void* buf,size_t nbytes) //成功时返回接收的字节数,失败时返回-1

基于udp的数据io函数

#include <sys/socket.h>
ssiz_t sendto(int sock,void *buff,size_t nbytes,int flags,struct sockaddr *to,socklen_t addrlen) //成功时返回传输的字节数,失败返回-1
sock 传输udp套接字的文件描述符
buff 保存待传输数据的缓冲地址值
nbytes 数据长度
to 存有目标地址的值
addlen to变量长度

客户端调用sento函数自动分配ip地址和端口号

ssize_t recvfrom(int sock,void *buff,size_t nbytes,int flags.struct sockaddr *from,socklen_t *addrlen) //成功时返回接手的字节数,失败-1
sock:接收udp套接字文件描述符
buff 保存地址
nbytes 可接受的最大字节数
from 发送端地址信息
addrlen from变量地址长度
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:45:03  更:2021-08-17 15:45:57 
 
开发: 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年12日历 -2024/12/28 6:09:57-

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