day13
2015-07-30 14:40
253 查看
复习:
1.使用信号量集进行进程间的通信
1.1概念
信号量是一个计数器,用于控制同时访问资源的进程数
信号量集是信号量的集合,可以用于控制多种不同资源的访问问题
1.2计数器的工作方式
(1)初始化计数器最大值
(2)如果有进程申请资源,那么计数器-1
(3)当计数器为0时,停止进程对资源的申请,申请的进程进入阻塞状态
(4)如果有进程释放资源,那么计数器+1
(5)当计数器>0时,那么阻塞的进程就可以申请资源,而申请不到资源的进程继续阻塞
1.3使用信号量集进行通信的步骤
(1)获取key值,使用ftok函数
(2)创建/获取信号量集,使用semget函数
(3)对信号量集中指定的信号量集进行初始化,使用semctl函数
(4)对信号量集进行操作,也就是对指定的信号进行+1/-1d等操作,使用semop函数
(5)如果不再使用信号量集,那么可以删除信号量集,此时使用semctl函数
2.网络相关函数
2.1七层协议
应用层 表示层 会话层 网络层 数据链路层 物理层
2.2 IP地址
IP地址是互联网唯一标识,本质上就是32位二进制的整数(IPV4),正在向128位扩展(IPV6)
采用点分十进制表示法 192.168.1.1
IP地址分类:
A类:
B类:
C类:
D类:
IP地址 主要有 网络地址+主机地址
MAC地址 网卡的物理地址
子网掩码 一般和IP地址搭配使用,主要用于区分IP地址中的网络地址和主机地址,与IP地址进行按位与
2.3端口号
使用IP地址定位到主机,使用端口号可以定位到应用程序
端口号是unsigned short 类型 0~65535
0~1024 一般都是系统占用
2.4 字节序
今天:
(1)网络编程
(2)多线程
1.网络编程
使用socket进行通信,socket -插座,套接字,实际上就是一个逻辑通信载体
1.1 一对一通信模型
服务器端:
(1)创建socket,使用socket函数
(2)准备一个通信地址,使用结构体类型
(3)将socket和通信地址进行绑定,使用bind函数
(4)进行通信,使用read,write函数
(5)关闭socket,使用close函数
客户端:
(1)创建socket,使用socket函数
(2)准备一个通信地址,使用结构体类型
(3)将socket和通信地址进行链接,使用connect函数
(4)进行通信,使用read/write函数
(5)关闭socket,使用close函数
1.2 相关函数的介绍
(1)socket函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
第一个参数:域/协议簇
AF_UNIX AF_LOCAL -本地通信
AF_INET -使用IPV4进行通信
AF_INET6 使用IPV6进行通信
第二个参数:指定协议
SOCK_STREAM -使用数据流的形式通信,TCP协议
SOCK_DGRAM -使用数据报的形式通信,UDP协议
第三个参数:之地能特殊协议,直接给0即可
返回值:成功返回文件描述符,失败返回-1
函数功能:创建用于交流的端点,通信载体
(2)bind函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
第一个参数:socket描述符
第二个参数:准备的通信地址
第三个参数:通信地址的大小
返回值:成功返回0,失败返回-1
函数的功能:将准备的通信地址和socket进行绑定
(3)准备的通信地址类型
a.通用的通信地址
struct sockaddr {
sa_family_t sa_family;//域,协议簇
char sa_data[14];//地址
此结构体一般很少直接使用,而绝大多数都是作为函数的参数使用 }
b.本地通信的结构体类型
#include<sys/un.h>
struct socket_un{
sa_family_t sun_family ; Address family.//协议簇
char sun_path[] ;Socket pathname.//socket文件的路径
};
c.网络通信的结构体类型
#include <netinet/in.h>
struct sockaddr_in{
sa_family_t sin_family AF_INET;//协议簇
in_port_t sin_port Port number;//端口号
struct in_addr sin_addr IP address;//ip地址
};
struct in_addr
{
in_addr_t s_addr;//ip地址
};
(4)connect 函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
函数的功能类似于bind函数;
(5)htons函数
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
功能:
htons函数表示将short类型参数的主机字节序,转换成网络字节序,通过返回值返回转换之后的结果
(6)inet_addr函数
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
功能:将参数指定的点分十进制形式的ip地址转换成网络字节序的整数地址
1.3 基于TCP通信模型
服务器端:
(1)创建socket,使用socket函数,SOCK_STREAM
(2)准备通信地址,struct sockaddr_in结构体
(3)进行绑定,使用bind函数
(4)监听,使用listen函数
(5)接受客户端的链接请求,使用accept函数
(6)进行通行,使用read/write函数
(7)关闭socket,使用close函数。
客户端:
(1)创建socket
(2)准备通信地址
(3)进行链接
(4)进行通信
(5)关闭socket
1.4 相关函数
(1)listen函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int listen(int sockfd, int backlog);
第一个参数;socket 描述符
第二个参数:允许访问的最大链接数,即将链接的队列最大值
返回值:成功返回0 ,失败返回-1
功能:监听socket上的链接请求
(2)accept函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
第一个参数:socket描述符
第二个参数:用于保存所接受的客户端的地址
第三个参数:地址的大小
返回值:成功返回新的文件描述符,失败返回-1
函数的功能:响应客户端的连接请求
注意:
使用socket 函数创建的描述符主要用于等待客户端的链接,不参与信息的交互,而accept函数返回的描述符主要用于针对客户端的信息交互通道
(3)inet_ntoa函数
char *inet_ntoa(struct in_addr in);
功能:将网络通信结构体中的第三个成员类型的ip地址转换成字符形式
1.使用信号量集进行进程间的通信
1.1概念
信号量是一个计数器,用于控制同时访问资源的进程数
信号量集是信号量的集合,可以用于控制多种不同资源的访问问题
1.2计数器的工作方式
(1)初始化计数器最大值
(2)如果有进程申请资源,那么计数器-1
(3)当计数器为0时,停止进程对资源的申请,申请的进程进入阻塞状态
(4)如果有进程释放资源,那么计数器+1
(5)当计数器>0时,那么阻塞的进程就可以申请资源,而申请不到资源的进程继续阻塞
1.3使用信号量集进行通信的步骤
(1)获取key值,使用ftok函数
(2)创建/获取信号量集,使用semget函数
(3)对信号量集中指定的信号量集进行初始化,使用semctl函数
(4)对信号量集进行操作,也就是对指定的信号进行+1/-1d等操作,使用semop函数
(5)如果不再使用信号量集,那么可以删除信号量集,此时使用semctl函数
2.网络相关函数
2.1七层协议
应用层 表示层 会话层 网络层 数据链路层 物理层
2.2 IP地址
IP地址是互联网唯一标识,本质上就是32位二进制的整数(IPV4),正在向128位扩展(IPV6)
采用点分十进制表示法 192.168.1.1
IP地址分类:
A类:
B类:
C类:
D类:
IP地址 主要有 网络地址+主机地址
MAC地址 网卡的物理地址
子网掩码 一般和IP地址搭配使用,主要用于区分IP地址中的网络地址和主机地址,与IP地址进行按位与
2.3端口号
使用IP地址定位到主机,使用端口号可以定位到应用程序
端口号是unsigned short 类型 0~65535
0~1024 一般都是系统占用
2.4 字节序
今天:
(1)网络编程
(2)多线程
1.网络编程
使用socket进行通信,socket -插座,套接字,实际上就是一个逻辑通信载体
1.1 一对一通信模型
服务器端:
(1)创建socket,使用socket函数
(2)准备一个通信地址,使用结构体类型
(3)将socket和通信地址进行绑定,使用bind函数
(4)进行通信,使用read,write函数
(5)关闭socket,使用close函数
客户端:
(1)创建socket,使用socket函数
(2)准备一个通信地址,使用结构体类型
(3)将socket和通信地址进行链接,使用connect函数
(4)进行通信,使用read/write函数
(5)关闭socket,使用close函数
1.2 相关函数的介绍
(1)socket函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
第一个参数:域/协议簇
AF_UNIX AF_LOCAL -本地通信
AF_INET -使用IPV4进行通信
AF_INET6 使用IPV6进行通信
第二个参数:指定协议
SOCK_STREAM -使用数据流的形式通信,TCP协议
SOCK_DGRAM -使用数据报的形式通信,UDP协议
第三个参数:之地能特殊协议,直接给0即可
返回值:成功返回文件描述符,失败返回-1
函数功能:创建用于交流的端点,通信载体
(2)bind函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
第一个参数:socket描述符
第二个参数:准备的通信地址
第三个参数:通信地址的大小
返回值:成功返回0,失败返回-1
函数的功能:将准备的通信地址和socket进行绑定
(3)准备的通信地址类型
a.通用的通信地址
struct sockaddr {
sa_family_t sa_family;//域,协议簇
char sa_data[14];//地址
此结构体一般很少直接使用,而绝大多数都是作为函数的参数使用 }
b.本地通信的结构体类型
#include<sys/un.h>
struct socket_un{
sa_family_t sun_family ; Address family.//协议簇
char sun_path[] ;Socket pathname.//socket文件的路径
};
c.网络通信的结构体类型
#include <netinet/in.h>
struct sockaddr_in{
sa_family_t sin_family AF_INET;//协议簇
in_port_t sin_port Port number;//端口号
struct in_addr sin_addr IP address;//ip地址
};
struct in_addr
{
in_addr_t s_addr;//ip地址
};
(4)connect 函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
函数的功能类似于bind函数;
(5)htons函数
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
功能:
htons函数表示将short类型参数的主机字节序,转换成网络字节序,通过返回值返回转换之后的结果
(6)inet_addr函数
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
功能:将参数指定的点分十进制形式的ip地址转换成网络字节序的整数地址
1.3 基于TCP通信模型
服务器端:
(1)创建socket,使用socket函数,SOCK_STREAM
(2)准备通信地址,struct sockaddr_in结构体
(3)进行绑定,使用bind函数
(4)监听,使用listen函数
(5)接受客户端的链接请求,使用accept函数
(6)进行通行,使用read/write函数
(7)关闭socket,使用close函数。
客户端:
(1)创建socket
(2)准备通信地址
(3)进行链接
(4)进行通信
(5)关闭socket
1.4 相关函数
(1)listen函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int listen(int sockfd, int backlog);
第一个参数;socket 描述符
第二个参数:允许访问的最大链接数,即将链接的队列最大值
返回值:成功返回0 ,失败返回-1
功能:监听socket上的链接请求
(2)accept函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
第一个参数:socket描述符
第二个参数:用于保存所接受的客户端的地址
第三个参数:地址的大小
返回值:成功返回新的文件描述符,失败返回-1
函数的功能:响应客户端的连接请求
注意:
使用socket 函数创建的描述符主要用于等待客户端的链接,不参与信息的交互,而accept函数返回的描述符主要用于针对客户端的信息交互通道
(3)inet_ntoa函数
char *inet_ntoa(struct in_addr in);
功能:将网络通信结构体中的第三个成员类型的ip地址转换成字符形式
相关文章推荐
- Java回调函数
- Android 分析工具 APKAnalyser
- 提高iOS开发效率的方法和工具
- android开发中有EditText,当输入时输入法会把底部的导航栏顶上去。如何解决?
- linux 下 动态库的编写和使用
- ibatis+struts+spring配置和登录实现
- 黑马程序员---iOS学习基础---数组与函数
- 2.2 分析算法
- HTML 表单
- 手机客户端post请求得到不参数
- 素数 hdu 3792 Twin Prime Conjecture
- jQuery 插件开发
- day12
- paml正选择处理时序列里有终止密码子怎么处理掉
- SQL中 decode()函数简介 - FreeSpider - 博客园
- Atom飞行手册翻译: 2.3 文本选择
- 对TCP/IP网络协议的深入浅出归纳 注:浅显易懂的分析
- AE开发中的“尝试读取或写入受 保护的内存。这通常指示其他内存已损坏。”错误解析
- webstorm 安装 YUICompressor
- Low-rank approximations