day14
2015-07-30 14:41
344 查看
今天内容:
(1)基于UDP通信的模型
(2)线程和多线程以及多线程的同步问题
1.基于UDP通信的模型
1.1概念
TCP 传输控制协议,面向链接的协议
UDP 用户数据报协议,非面向链接的协议
1.2 区别
(1)TCP是一种面向链接的协议,在通信的全程保持链接,优点:可以保证数据的完整性和安全性以及准确性,并且可以重发所有数据,缺点:服务器压力比较大,资源占用率比较高。
(2)UDP是一种非面向链接的协议,在发送数据的时候连一下,不保持全程链接,
优点是:服务器的压力比较小,资源占用率比较低
缺点是:不保证数据的安全性和完整性以及准确性。
1.3 基于UDP通信的模型
服务器:
(1)创建socket,使用socket函数
(2)准备通信地址,使用struct sockaddr_in结构体
(3)绑定socket和通信地址,使用bind函数
(4)进行通信,使用read和write函数
(5)关闭socket,使用close函数
客户端:
(1)创建socket,使用socket函数
(2)准备通信地址,使用struct sockaddr_in 结构体
(3)进行通信,使用read/write函数
(4)关闭socket,使用close函数
1.4相关函数的介绍
(1)sendto函数
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
第一个参数:sock描述符
第二个参数:将要发送的数据的首地址
第三个参数:发送的数据大小
第四个参数:发送的方式,默认给0即可
第五个参数:发送到目标地址
第六个参数:目标地址的大小
返回值:成功返回发送的数据大小,失败返回-1
函数的功能:向指定的目标地址发送数据
注意:send函数相对于sendto少了目标地址参数,一般用于tcp通信中。
(2)recvfrom函数
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int f
lags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
第一个参数:socket描述符
第二个参数:存放数据的缓冲区首地址
第三个参数:读取的数据大小
第四个参数:默认给0即可
第五个参数:客户端地址信息的
第六个参数:客户端地址的大小
返回值:成功返回读取的数据大小,失败返回-1
函数的功能:接受指定的消息
2线程
2.1 线程的概念
线程 -属于进程,是进程中的程序流
在操作系统中支持多进程的,而每个进程的内部支持多个线程,多个线程并行
进程重量级单位,每个进程都需要独立的内存空间等资源,新建进程对资源的消耗非常大,线程是轻量级的,不需要申请独立的内存资源,但是每个线程页也有一个独立栈区,线程实际上更多的是共享进程中的资源
相关函数:
(1)pthread_creat函数
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
第一个参数:用于存放线程id
第二个参数:线程的属性,直接给0即可
第三个参数:线程所调用的函数
第四个参数:给线程调用函数传递的实参
返回值:成功返回0,失败返回错误编号
函数的功能:用于创建一个新的线程
注意:
(1)在编译链接时需要加选项 -lpthread
(2)当程序结束时,所有的子进程都结束
(2)pthread_join函数
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
(Compile and link with -pthread.)
第一个参数:指定将要等待的线程id
第二个参数:用于接受所等待线程的退出码
RETURN VALUE
On success, pthread_join() returns 0; on error, it
returns an error number.
功能:等待thread所指向的线程结束
(3)pthread_self函数
#include <pthread.h>
pthread_t pthread_self(void);
(Compile and link with -pthread.)
功能:获取正在执行的线程id,返回值就是线程id.
RETURN VALUE
This function always succeeds, returning the call‐
ing thread's ID.
练习:
创建线程,给线程处理函数一个半径,打印圆的面积, 圆的面积:3.14*r*r
创建一个线程,在线程处理函数中返回1~10之间的和,通过pthread_join接收一下,并且打印出来。
(4) pthread_exit函数
#include <pthread.h>
void pthread_exit(void *retval);
参数:用于返回一个数据
功能:终止正在调用的线程
exit函数,用于终止一个进程
(Compile and link with -pthread.)
2.3线程的状态
线程有两种状态;
(1)非分离状态 -pthread_join
对于非分离状态的线程来说,线程资源的回收需要等到join函数结束之后
(2)分离状态 -pthread_detach
对于分离状态的线程来说,线程结束后资源马上回收,无法使用pthread_join函数等待的
#include <pthread.h>
int pthread_detach(pthread_t thread);
参数:线程id
返回值:成功返回0,失败返回错误编号
功能:用于分离线程:
(Compile and link with -pthread.)
明日预报;
(1)线程的取消和同步问题
(2)编写一个基于TCP进程
(1)基于UDP通信的模型
(2)线程和多线程以及多线程的同步问题
1.基于UDP通信的模型
1.1概念
TCP 传输控制协议,面向链接的协议
UDP 用户数据报协议,非面向链接的协议
1.2 区别
(1)TCP是一种面向链接的协议,在通信的全程保持链接,优点:可以保证数据的完整性和安全性以及准确性,并且可以重发所有数据,缺点:服务器压力比较大,资源占用率比较高。
(2)UDP是一种非面向链接的协议,在发送数据的时候连一下,不保持全程链接,
优点是:服务器的压力比较小,资源占用率比较低
缺点是:不保证数据的安全性和完整性以及准确性。
1.3 基于UDP通信的模型
服务器:
(1)创建socket,使用socket函数
(2)准备通信地址,使用struct sockaddr_in结构体
(3)绑定socket和通信地址,使用bind函数
(4)进行通信,使用read和write函数
(5)关闭socket,使用close函数
客户端:
(1)创建socket,使用socket函数
(2)准备通信地址,使用struct sockaddr_in 结构体
(3)进行通信,使用read/write函数
(4)关闭socket,使用close函数
1.4相关函数的介绍
(1)sendto函数
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
第一个参数:sock描述符
第二个参数:将要发送的数据的首地址
第三个参数:发送的数据大小
第四个参数:发送的方式,默认给0即可
第五个参数:发送到目标地址
第六个参数:目标地址的大小
返回值:成功返回发送的数据大小,失败返回-1
函数的功能:向指定的目标地址发送数据
注意:send函数相对于sendto少了目标地址参数,一般用于tcp通信中。
(2)recvfrom函数
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int f
lags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
第一个参数:socket描述符
第二个参数:存放数据的缓冲区首地址
第三个参数:读取的数据大小
第四个参数:默认给0即可
第五个参数:客户端地址信息的
第六个参数:客户端地址的大小
返回值:成功返回读取的数据大小,失败返回-1
函数的功能:接受指定的消息
2线程
2.1 线程的概念
线程 -属于进程,是进程中的程序流
在操作系统中支持多进程的,而每个进程的内部支持多个线程,多个线程并行
进程重量级单位,每个进程都需要独立的内存空间等资源,新建进程对资源的消耗非常大,线程是轻量级的,不需要申请独立的内存资源,但是每个线程页也有一个独立栈区,线程实际上更多的是共享进程中的资源
相关函数:
(1)pthread_creat函数
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
第一个参数:用于存放线程id
第二个参数:线程的属性,直接给0即可
第三个参数:线程所调用的函数
第四个参数:给线程调用函数传递的实参
返回值:成功返回0,失败返回错误编号
函数的功能:用于创建一个新的线程
注意:
(1)在编译链接时需要加选项 -lpthread
(2)当程序结束时,所有的子进程都结束
(2)pthread_join函数
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
(Compile and link with -pthread.)
第一个参数:指定将要等待的线程id
第二个参数:用于接受所等待线程的退出码
RETURN VALUE
On success, pthread_join() returns 0; on error, it
returns an error number.
功能:等待thread所指向的线程结束
(3)pthread_self函数
#include <pthread.h>
pthread_t pthread_self(void);
(Compile and link with -pthread.)
功能:获取正在执行的线程id,返回值就是线程id.
RETURN VALUE
This function always succeeds, returning the call‐
ing thread's ID.
练习:
创建线程,给线程处理函数一个半径,打印圆的面积, 圆的面积:3.14*r*r
创建一个线程,在线程处理函数中返回1~10之间的和,通过pthread_join接收一下,并且打印出来。
(4) pthread_exit函数
#include <pthread.h>
void pthread_exit(void *retval);
参数:用于返回一个数据
功能:终止正在调用的线程
exit函数,用于终止一个进程
(Compile and link with -pthread.)
2.3线程的状态
线程有两种状态;
(1)非分离状态 -pthread_join
对于非分离状态的线程来说,线程资源的回收需要等到join函数结束之后
(2)分离状态 -pthread_detach
对于分离状态的线程来说,线程结束后资源马上回收,无法使用pthread_join函数等待的
#include <pthread.h>
int pthread_detach(pthread_t thread);
参数:线程id
返回值:成功返回0,失败返回错误编号
功能:用于分离线程:
(Compile and link with -pthread.)
明日预报;
(1)线程的取消和同步问题
(2)编写一个基于TCP进程
相关文章推荐
- day15
- MATLAB符号运算
- 高级位操作技巧
- unity, surface shader access world position and localposition
- 网站设计
- javascript深入理解js闭包
- php 时间戳比较
- CheckBoxList 值写入与显示绑定
- 分期付款原理
- 移动开发-Android-tab效果之Fragment-1
- processing定时器代码
- WebDriver/StaleElementException
- day13
- Java回调函数
- Android 分析工具 APKAnalyser
- 提高iOS开发效率的方法和工具
- android开发中有EditText,当输入时输入法会把底部的导航栏顶上去。如何解决?
- linux 下 动态库的编写和使用
- ibatis+struts+spring配置和登录实现
- 黑马程序员---iOS学习基础---数组与函数