- 博客(12)
- 收藏
- 关注
原创 利用多进程/多线程实现多个客户端同时访问同一服务器
如果实现一客户端与服务器的交互比较容易(直接用TCP的编程流程就可以实现,只是这样写出的程序只能是一个客户端交互释放连接后其他客户端才可以与服务器交互 ),但是要实现多个客户端同时与同一服务器的交互就相对复杂一点。我们先给出服务器处理同一客户端的多次访问的伪代码: 要实现多个客户端同时与同一服务器的交互,就要求服务器与...
2018-12-02 15:56:42
10658
原创 TCP/IP的四层协议概述
现在因特网使用的主流协议族是TCP/IP协议族,它是一种分层、多协议的通信体系。 TCP/IP是一个四层协议系统,自底向上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过很多协议来实现,下层协议为上层协议提供服务。如下图所示: 在上图中,发送端发送一个“hello”,要依次经过应用层、传输层、网络层、数据链路层,每经过一...
2018-11-29 10:38:28
1454
原创 TCP与UDP的区别
TCP是面向连接的、可靠的、字节流服务。UDP是无连接的、不可靠的、数据报服务。本文主要是从有无连接,可不可靠,服务类型的不同来看TCP与UDP的区别。TCP字节流服务与UDP数据报服务的区别TCP字节流服务: 字节流传输有自己的缓冲区,发送端发送多次可能都存储在缓冲区,而向接收端发送时可能会...
2018-11-21 21:05:07
240
原创 UDP的编程流程
UDP编程流程:服务器端:socket(), bind(), recvfrom()/sendto(), close();客户端:socket(), sendto()/recvfrom(), close();以下是各个函数的具体介绍:首先提一句:linux下一切皆文件,socket也不例外,它是可读、可写、可控制、可关闭的文件描述符。创建socket#includ...
2018-11-15 19:46:25
4145
原创 TCP的编程流程
TCP编程流程:服务器端:socket(), bind(), listen(), accept(), recv()/send(), close();客户端:socket(), connect(), send/recv(), close();以下是各个函数的具体介绍:首先提一句:linux下一切皆文件,socket也不例外,它是可读、可写、可控制、可关闭的文件描述符。...
2018-11-15 19:45:38
971
原创 用信号量(互斥锁)实现两个线程交替打印
本文实现两个线程交替打印,采用的是逐步添加代码,分析每一步代码的作用,若想要看最终版本可直接翻看后面的最终版本。(本文以信号量为例,互斥锁的实现只需将信号量的函数换成相应的互斥锁的函数,互斥锁(信号量)函数不知道的看https://blog.youkuaiyun.com/liqiao_418/article/details/83684347)首先实现两个线程的打印,不加入信号量的应用,代码如下:(注:以下...
2018-11-06 15:59:41
7471
原创 线程同步(信号量、互斥锁)
和多进程程序一样,多线程程序也必须考虑同步问题。线程同步就是一个进程中多个线程协同步调,按预定的先后次序进行运行。pthresd_join可以看作简单的线程同步方式,但是它无法高效地实现复杂的同步需求。线程同步的方式主要有三种:信号量(Semaphore)、互斥量(Mutex)、条件变量。本文主要阐述了信号量和互斥锁的用法。信号量进程同步控制所使用的信号量的函数以sem开头,而在线程中...
2018-11-05 10:27:13
765
原创 线程基础
什么是线程?线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。线程是进程内部的一条执行序列(执行流),一个进程至少有一个线程,即main函数所代表的执行流。线程与进程有什么区别?进程和线程的关系就好比工厂里的厂房与生产线的关系,进程就是工厂里的厂房,线程就是厂房里的生产线。厂房里可能只有一条生产线,也可能有多条生产线;同样的,一个进程可以有一个线程,也可以有多个线程。...
2018-10-31 21:16:28
147
原创 杨辉三角形
杨辉三角形分三步来写:第一步:先定义一个二维数组,将第一列以及每行最后一个数字赋值为1第二步:有了第一步的赋值,就可以将剩下位置的值计算出来,容易知道每个数字都是上一行的该列元素与上一行的前一列元素 之和,如果 i 和 j 分别表示行号和列号的话,就有 arr[i][j]=arr[i-1][j-1]+arr[i-1][j] 第三部:打印输出数组#incl
2018-01-29 18:26:37
146
原创 优化的冒泡排序法
分别用数组法和指针法来写冒泡排序,例子中是将大的数字放在后面,首先来看数组法:#includevoid main(){int i,j,temp;int arr[]={14,25,90,42,28,76};int len=sizeof(arr)/sizeof(arr[0]); //计算数组长度bool flag;for(i=0;i{ flag=0
2018-01-29 17:40:20
192
原创 不开辟空间的情况下循环右移n次
循环右移n次,分为三步来做。用循环右移两位举例来说:第一,将helloworld分成两部分,第一部分hellowor,第二部分ld。第二,将这两部分分别变为倒序,第一部分为rowolleh,第二部分为dl,将两部分放在一起为rowollehdl。第三,将第二部的结果变为倒序,即为ldhellowor,就是我们所需要的结果程序编写如下///////////////////////
2018-01-21 15:28:16
362
原创 字母塔
字母塔分为两部分来做:空白部分和字母部分。1.空白部分:字母塔左边的空白部分用空格,字母塔右边的空白部分用换行。其中换行是在每行打印完字母之后加换行,接下来主要看字母塔左边的空格,把空格和行号 i 联系起来:第一行(i=1):25个空格;此时让 j=(1,2,……,25),j 每遍历一个值就打印一个空格,一共打印25个空格;j的最大值为26-1第二行(i=2);24个空格;此时让 j=
2018-01-12 17:08:40
585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人