网络编程基础知识笔记(2)
来源:互联网 发布:python json 字符串 编辑:程序博客网 时间:2024/06/04 01:08
//网络编程API
/*创建一个通信接口,得到一个套接字文件描述符,根据这个文件描述符,我们可以通过应用层来访问TCP/IP,对
网络底层驱动进行访问*/
int socket(int domain, int type, int protocol);
param1:地址族
AF_INET/PF_INET //用于IPV4的互联网通信
AF_INET6/PF_INET6 //用于IPV6的互联网通信
AF_UNIX/PF_UNIX/AF_LOCAL/PF_LOCAL //用于unix套接字,用于同一台主机进程之间通信
param2:套接字类型
SOCK_STREAM // TCP
SOCK_DGRAM // UDP
SOCK_RAW // 开发协议
param3:统一为0
int sock_fd;//主动套接字,该套接字可以主动的向别的主机发起连接请求
sock_fd = socket(AF_INET, SOCK_STREAM , 0);
//通用地址结构
struct sockaddr
{
u_short sa_family; // 地址族, AF_INET
char sa_data[14]; // 14字节协议地址
};
//IPV4协议地址结构
struct sockaddr_in
{
u_short sin_family; // 地址族, AF_INET,2 bytes
u_short sin_port; // 端口,2 bytes
struct in_addr sin_addr; // IPV4地址,4 bytes
char sin_zero[8]; // 8 bytes unused,作为填充
};
//IPV6协议地址结构
struct sockaddr_in6
{
xxxxxxxxxxxxxx
};
//UNIX协议地址结构
struct sockaddr_un
{
xxxxxxxxxxxxxx
};
//存放IPv4 IP地址的结构体
struct in_addr
{
in_addr_t s_addr; //32位网络二进制的IP地址
};
/*只有服务器才会调用该函数,为以上的套接字绑定一个IP地址和端口
指定sock_fd代表哪一个主机,该主机的哪一个进程
为了兼容不同的协议的地址结构,所以bind的第二个参数适用一个通用的结构体*/
int bind(int sockfd, struct sockaddr *my_addr, int addrlen) ;
param1:为哪个套接字进行绑定
param2:指定要绑定的是哪一个ip,哪一个端口
param3:存放ip地址和端口的结构体长度
struct sockaddr_in sinfo;
sinfo.sin_family = AF_INET;
sinfo.sin_port = htons(8888);
sinfo.sin_addr.s_addr = inet_addr("192.168.7.10");
bind(sockfd, (struct sockaddr *)&sinfo, sizeof(sinfo)) ;
别的主机,一个刚被创建的套接字为主动套接字,可以向别的主机发起链接请求*/
int listen(int sockfd, int backlog);
sockfd:监听连接的套接字
backlog:在同一时刻,能接受的连接请求个数(5-10)
/*1:接收一个新的连接请求,并返回一个新的套接字,为连接套接字,这个套接字代表一个新的连接
* 2:accept会发生阻塞,直到收到一个接连请求为止
* 3:一个accept只能接收一个连接请求,如果要接收多个请求,必须使用循环*/
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) ;
param1:要通过哪一个套接字来接收请求
param2:用来保存发起连接请求的那一端的信息(ip和端口),保存客户端的信息。
param3:保存结构体长度地址
返回值:
成功:返回一个文件描述符(链接套接字)
失败:返回-1
int conn_fd;
conn_fd = accept(sockfd, NULL, NULL) ;
/*进行数据读取*/
read(conn_fd, buf, 100);
/*客户端来调用该函数,用来向服务器发起连接请求*/
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
param1:通过哪个套接字来发送请求
param2:用来保存服务器的信息,也就是要把连接请求发送给ip和端口为指定的那个服务器
/*创建一个通信接口,得到一个套接字文件描述符,根据这个文件描述符,我们可以通过应用层来访问TCP/IP,对
网络底层驱动进行访问*/
int socket(int domain, int type, int protocol);
param1:地址族
AF_INET/PF_INET //用于IPV4的互联网通信
AF_INET6/PF_INET6 //用于IPV6的互联网通信
AF_UNIX/PF_UNIX/AF_LOCAL/PF_LOCAL //用于unix套接字,用于同一台主机进程之间通信
param2:套接字类型
SOCK_STREAM // TCP
SOCK_DGRAM // UDP
SOCK_RAW // 开发协议
param3:统一为0
int sock_fd;//主动套接字,该套接字可以主动的向别的主机发起连接请求
sock_fd = socket(AF_INET, SOCK_STREAM , 0);
//通用地址结构
struct sockaddr
{
u_short sa_family; // 地址族, AF_INET
char sa_data[14]; // 14字节协议地址
};
//IPV4协议地址结构
struct sockaddr_in
{
u_short sin_family; // 地址族, AF_INET,2 bytes
u_short sin_port; // 端口,2 bytes
struct in_addr sin_addr; // IPV4地址,4 bytes
char sin_zero[8]; // 8 bytes unused,作为填充
};
//IPV6协议地址结构
struct sockaddr_in6
{
xxxxxxxxxxxxxx
};
//UNIX协议地址结构
struct sockaddr_un
{
xxxxxxxxxxxxxx
};
//存放IPv4 IP地址的结构体
struct in_addr
{
in_addr_t s_addr; //32位网络二进制的IP地址
};
/*只有服务器才会调用该函数,为以上的套接字绑定一个IP地址和端口
指定sock_fd代表哪一个主机,该主机的哪一个进程
为了兼容不同的协议的地址结构,所以bind的第二个参数适用一个通用的结构体*/
int bind(int sockfd, struct sockaddr *my_addr, int addrlen) ;
param1:为哪个套接字进行绑定
param2:指定要绑定的是哪一个ip,哪一个端口
param3:存放ip地址和端口的结构体长度
struct sockaddr_in sinfo;
sinfo.sin_family = AF_INET;
sinfo.sin_port = htons(8888);
sinfo.sin_addr.s_addr = inet_addr("192.168.7.10");
bind(sockfd, (struct sockaddr *)&sinfo, sizeof(sinfo)) ;
/*将一个套接字设为监听状态,该套接字成为被动套接字,即套接字只能被动接受别的主机的请求,而不能主动连接
别的主机,一个刚被创建的套接字为主动套接字,可以向别的主机发起链接请求*/
int listen(int sockfd, int backlog);
sockfd:监听连接的套接字
backlog:在同一时刻,能接受的连接请求个数(5-10)
/*1:接收一个新的连接请求,并返回一个新的套接字,为连接套接字,这个套接字代表一个新的连接
* 2:accept会发生阻塞,直到收到一个接连请求为止
* 3:一个accept只能接收一个连接请求,如果要接收多个请求,必须使用循环*/
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) ;
param1:要通过哪一个套接字来接收请求
param2:用来保存发起连接请求的那一端的信息(ip和端口),保存客户端的信息。
param3:保存结构体长度地址
返回值:
成功:返回一个文件描述符(链接套接字)
失败:返回-1
int conn_fd;
conn_fd = accept(sockfd, NULL, NULL) ;
/*进行数据读取*/
read(conn_fd, buf, 100);
/*客户端来调用该函数,用来向服务器发起连接请求*/
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
param1:通过哪个套接字来发送请求
param2:用来保存服务器的信息,也就是要把连接请求发送给ip和端口为指定的那个服务器
阅读全文
1 0
- 网络编程基础知识笔记(2)
- 网络编程基础知识笔记(1)
- 网络编程基础知识笔记(3)
- 网络编程(基础知识)
- Java 网络编程 学习笔记一 基础知识
- 学习笔记-基础知识12-网络编程
- HTML---网络编程基础知识(2)
- 网络编程基础知识(一)
- 网络编程基础知识(一)
- 网络编程基础知识(一)
- Java 网络编程(一) 网络基础知识
- Java 网络编程(一) 网络基础知识
- 网络编程 网络基础知识
- 网络基础知识(2)
- 黑马程序员-网络编程基础知识2
- 黑马程序员—网络编程的基础知识笔记
- linux网络编程学习笔记之一 -----各种基础知识小结
- Linux网络编程-基础知识(1)
- Android-实现View滑动的6种方式
- mail postfix postfix+mariadb
- serverlet总结
- ajax请求超时设定
- python中的filter函数
- 网络编程基础知识笔记(2)
- cs231Linear classification: Support Vector Machine, Softmax笔记
- Linux $? 返回值对照
- Python——数据导入与准备
- 使用模板快速新建工程
- 【TJOI2015】bzoj3998 弦论
- 看完让你彻底搞懂Websocket原理
- mysql中char与varchar的区别分析
- 笔试题目2(HTML+CSS+JavaScript)