Chinaunix首页 | 论坛 | 博客
  • 博客访问: 424950
  • 博文数量: 103
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-15 22:17
文章分类

全部博文(103)

文章存档

2013年(4)

2012年(99)

我的朋友

分类: C/C++

2012-09-22 11:13:52



 TCP?Transmission Control Protocol?传输控制协议?是基于连接的协议?也就是说?在正式收发数据前?必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来?其中的过程非常复杂?我们这里只做简单、形象的介绍?你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程?主机A向主机B发出连接请求数据包?“我想给你发数据?可以吗?”?这是第一次对话?主机B向主机A发送同意连接和要求同步?同步就是两台主机一个在发送?一个在接收?协调工作?的数据包?“可以?你什么时候发?”?这是第二次对话?主机A再发出一个数据包确认主机B的要求同步?“我现在就发?你接着吧?”?这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步?经过三次“对话”之后?主机A才向主机B正式发送数据。  TCP协议能为应用程序提供可靠的通信连接?使一台计算机发出的字节流无差错地发往网络上的其他计算机?对可靠性要求高的数据通信系统往往使用TCP协议传输数据。  UDP?User Data Protocol?用户数据报协议?是与TCP相对应的协议。它是面向非连接的协议?它不与对方建立连接?而是直接就把数据包发送过去? UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如?我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常?其实“ping”命令的原理就是向对方主机发送UDP数据包?然后对方主机确认收到数据包?如果数据包是否到达的消息及时反馈回来?那么网络就是通的。例如?在默认状态下?一次“ping”操作发送4个数据包?如图2所示?。大家可以看到?发送的数据包数量是4包?收到的也是4包?因为对方主机收到后会发回一个确认收到的数据包?。这充分说明了UDP协议是面向非连接的协议?没有建立连接的过程。正因为UDP协议没有连接的过程?所以它的通信效果高?但也正因为如此?它的可靠性不如TCP协议高。QQ就使用UDP发消息?因此有时会出现收不到消息的情况。  TCP协议和UDP协议各有所长、各有所短?适用于不同要求的通信环境。 其中TCP提供IP环境下的数据可靠传输?它提供的服务[1]包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说?它是事先为所发送的数据开辟出连接好的通道?然后再进行数据发送?而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说?TCP对应的是可靠性要求高的应用?而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有?Telnet、FTP、SMTP等?UDP支持的应用层协议主要有?NFS?网络文件系统?、SNMP?简单网络管理协议?、DNS?主域名称系统?、TFTP?通用文件传输协议?等。   两种协议均是最常见的网络通讯协议,两种协议优缺点同样突出, TCP重安全?轻速度。遵循三次会话原则。一些比较重要的数据可以用它?可靠性比较高。UDP轻安全?重速度。无连接传输数据协议?简单、不可靠的信息传输服务
TCP/UDP都是传输层的协议,TCP/ip协议分四层:应用层,传输层,网络层和网络接口层
 
 
南北桥芯片组很好区分,北桥主要负责CPU内存和各个电脑配件的数据传输,而南桥主要负责一些外接功能,例如USB 光驱 硬盘的接口的功能,所以靠近cpu的芯片即为北桥芯片,现在大多数主板都会在北桥芯片上放一个散热器,有些甚至要加风扇,南桥发热要少很多 ,所以南桥芯片一般不加散热片
集电极开路输出电路原理,与外接电路:要接上拉电阻
 
电阻选型时应考虑的参数
 容差:通用场合选用1%精读,当有特殊要求比如输出电压精度要求时选用更小的  选择比率/阻值:当阻值不是很重要时,比如分压器,以减少电路中不同阻值种类数目以实现大批量采购节约成本  最大电压:电阻其实也可以被击穿,高压应用时要注意  温度系数:大多数电阻都有很小的温度系数(50~250ppm每度),电阻发热时,线绕电阻的温度系数会有 较大变化  额定功率:一般电阻功耗为额定值一半  脉冲功率:在较短时间内,线绕电阻可以承受远大于其额定功率的冲击,但非线绕电阻不行 
 
strcpy的实现
作为一个函数,要考虑很多,比如说返回值,形参类型,参数检测报错等等功能才能算作一个完整的函数
 

点击(此处)折叠或打开

  1. char *strcpy(char *strDestination, const char *strSource)
  2.   {
  3.   assert(strDestination!=NULL && strSource!=NULL);
  4.   char *strD=strDestination;
  5.   while ((*strDestination++=*strSource++)!='\0')
  6.   return strD;
  7.   }

先记录返回值最后返回
 
BSS段:BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStartedbySymbol的简称。BSS段属于静态内存分配。
数据段:数据段(datasegment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
代码段:代码段(codesegment/textsegment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
(stack):栈又称堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。
 
大端存储:是从物理地址的高位到低位的存储,小端存储是正常的从大到小的存储;
判断是大端还是小端的方法是:

点击(此处)折叠或打开

  1. int checkCPU( ) { { union w { int a; char b; } c; c.a = 1; return(c.b ==1); } }

查看返回值

点击(此处)折叠或打开

  1. bool IsBig_Endian() { unsigned short test = 0x1234 ; if(*( (unsigned char *) &test ) == 0x12 ) return TRUE; else return FALSE; }//IsBig_Endian()

对于一个int型变量赋值1,再转化成char型,如果char读出来是1为大端,如果读出来是0为小端
阅读(1299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~