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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程——cs架构及tcp编程 -> 正文阅读

[网络协议]网络编程——cs架构及tcp编程

一、cs架构

服务器? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?客户端

创建套接字 -----socket()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 创建套接字----socket()

绑定本机ip和端口号-----bind()

创建套接字监听------listen()

等待连接-----accept()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 发起连接-------connect()

接发数据----read()/write()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 接发数据-------read()/write()

关闭套接字-----close()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 关闭套接字------close()

二、服务器的TCP编程

①创建套接字

#include <sys/types.h> ? ? ? ? ?/* See NOTES */
#include <sys/socket.h>

函数原型:

? ?int socket(int domain, int type, int protocol);
? ?参数:
? ??? ?domain:地址族 //每一个不同的协议,地址结构不同
? ??? ??? ?AF_UNIX: 域套接字
? ??? ??? ?AF_INET:IPV4协议 ? //=PF_INET(重定义)
? ??? ??? ?AF_INET6:IPV6协议
? ?type:套接字类型
? ??? ??? ?SOCK_STREAM:流式套接字 -- 唯一对应tcp通信
? ??? ??? ?SOCK_GDRAM:数据报套接字 -- 唯一对应udp通信
? ?protocol:
? ??? ??? ?默认值填0;? ?
? ?返回值:
? ??? ??? ?成功返回一个套接字,失败返回-1;?

?②绑定ip和端口号

#include <sys/types.h> ? ? ? ? ?/* See NOTES */
? ?#include <sys/socket.h> ? ?
? ?#include <netinet/in.h>
? ?#include <netinet/ip.h>?

函数原型:

? ?int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
? ?参数:
? ??? ?sockfd:socket创建得到的套接字
? ??? ?addr:?服务器的地址结构首地址
?? ?addrlen:服务器地址结构的大小
? ?返回值:成功返回0,失败返回-1;
? ??? ?
? ??? ?IPV4对应的地址结构:
? ??? ? ? ? ? struct sockaddr_in {
? ? ? ? ? ? ? ?sa_family_t ? ?sin_family; /* address family: AF_INET */
? ? ? ? ? ? ? ?in_port_t ? ? ?sin_port; ? /* port in network byte order */
? ? ? ? ? ? ? ?struct in_addr sin_addr; ? /* internet address */
? ? ? ? ? ?};
? ? ? ? ? ?struct in_addr {
? ? ? ? ? ? ? ?uint32_t ? ? ? s_addr; ? ? /* address in network byte order */
? ? ? ? ? ?};?
?? ??? ? ? s_addr才是绑定ip地址的变量?? ?
?? ??? ? ? 例:
?? ??? ? ? ?? ??? ?struct sockaddr_in saddr;
?? ??? ? ? ?? ??? ?saddr.sin_family = AF_INET; //ipv4协议
?? ??? ? ? ?? ??? ?saddr.sin_port = 8888; ? //设置端口号为8888
?? ??? ? ? ?? ??? ?saddr.sin_addr.s_addr = inet_addr("192.168.7.220"); //将点分十进制的地址转换为整型再赋值

注意:ip有两种表达方式,一种是点分十进制,一种是二进制。

? ? ? ? ?相关转换函数为:inet_addr(点分十进制转二进制)? ?inet_ntoa(二进制转点分十进制)

③创建套接字监听器?

?#include <sys/types.h> ? ? ? ? ?/* See NOTES */
? ?#include <sys/socket.h>

函数原型:

? ?int listen(int sockfd, int backlog);
? ?参数:
? ??? ?sockfd:套接字
? ??? ?backlog:客户端连接的最大等待队列长度?
? ?返回值:成功返回0,失败返回-1;

④ 等待客户端连接

?#include <sys/types.h> ? ? ? ? ?/* See NOTES */
? ?#include <sys/socket.h>

函数原型:

? ?int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
? ?参数:
? ??? ?sockfd:socket创建得到的套接字
? ??? ?addr:客户端的地址结构首地址
? ??? ?addrlen:?客户端地址结构的长度的首地址
? ?返回值:
? ??? ?成功返回一个新的套接字(读写套接字),该套接字用于服务器的数据读写,失败返回-1

⑤向服务器连接

?#include <sys/types.h> ? ? ? ? ?/* See NOTES */
? ?#include <sys/socket.h>

函数原型:

? ?int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
? ?参数:
? ??? ?sockfd:套接字
? ??? ?addr:服务器的地址结构的首地址
? ??? ?addrlen:服务器地址结构的大小?
? ?返回值:成功返回0,失败返回-1;?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 13:08:02  更:2022-10-17 13:08:59 
 
开发: 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年11日历 -2024/11/25 21:15:09-

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