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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> c学习socket -> 正文阅读

[网络协议]c学习socket

int socket(int domain, int type, int protocol);

domain:协议域,协议族(family),决定了socket的地址类型
????????AF_UNIX:本机通信
????????AF_INET:IPv4
????????AF_INET6:IPv6

type:socket类型
????????SOCK_STREAM:TCP流
????????SOCK_DGRAM:UDP数据报
????????SOCK_RAW:原始套接字
????????SOCK_PACKET
????????SOCK_SEQPACKET

protocol:协议,一般设置为0,domain参数未知情况下,可以起确定协议的种类的作用
????????IPPROTO_TCP:TCP传输协议
????????IPPTOTO_UDP:UDP传输协议
????????IPPROTO_SCTP:STCP传输协议
????????IPPROTO_TIPC:TIPC传输协议

创建一个socket描述符(socket descriptor),它唯一标识一个socket,后续把它作为参数,通过它来进行一些读写操作
?

=================================服务端==================================

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:服务端socket描述字,它是通过socket()函数创建了,唯一标识一个socket
addr:一个const?struct?sockaddr *指针,指向要绑定给sockfd的协议地址
addrlen:地址长度

创建socket时,返回的socket描述字它存在于协议族空间中,没有具体地址。调用bind()函数将特定地址赋给socket,否则就当调用connect()、listen()时系统会自动随机分配

int listen(int sockfd, int backlog);

sockfd:服务端socket描述字
backlog:可以排队的最大连接个数

socket()函数创建的socket默认是一个主动类型的,listen函数将socket变为被动类型的,等待客户的连接请求。

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd:服务端socket描述字
addr:客户端的协议地址
addrlen:客户端的协议地址长度

accpet成功后,返回值是由内核自动生成的一个全新的描述字,代表与返回客户的TCP连接

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

ssize_t:有符号整型
size_t:无符号整型

sockfd:读取数据的套接字描述符
buf:存储数据的缓存区地址指针。
len:缓存区的最大尺寸
flags:标志,一般都为0

?=================================客户端==================================

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:客户端的socket描述字
addr:服务器的socket地址
addrlen:地址的长度

客户端通过调用connect函数来建立与TCP服务器的连接

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

send 的参数含义如下:
sockfd:与远程程序连接的套接字描述符
buf:发送的信息的地址指针
len:信息长度。
flags:发送标记,一般都设为0

int close(int fd);

fd:描述字

测试代码

服务端

#include<stdio.h>

客户端

附件描述

#define UNIX_PATH_MAX    108

//Unix地址结构
struct sockaddr_un { 
    sa_family_t sun_family;               /* 协议簇 */ 
    char        sun_path[UNIX_PATH_MAX];  /* 本地文件*/ 
};

//------------------------------------------------------------------------------

//ipv4地址结构
struct sockaddr_in {
    sa_family_t    sin_family; /* 协议簇 */
    in_port_t      sin_port;   /* 端口 */
    struct in_addr sin_addr;   /* 地址 */
};

/* ip结构 */
struct in_addr {
    uint32_t       s_addr;     /* ip */
};

//------------------------------------------------------------------------------

//ipv6地址结构:
struct sockaddr_in6 { 
    sa_family_t     sin6_family;   /* 协议簇 */
    in_port_t       sin6_port;     /* 端口 */
    uint32_t        sin6_flowinfo; /* IPv6 flow information */ 
    struct in6_addr sin6_addr;     /* 地址 */
    uint32_t        sin6_scope_id; /* Scope ID (new in 2.4) */ 
};

/* ip结构 */
struct in6_addr { 
    unsigned char   s6_addr[16];   /* ip */
};

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

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