笔记!

1.在计算malloc这种手动分配的空间大小的字符串中,不能简单用strlen和sizeof来进行空间大小的计算,这两个都不能得到你想要的值。

如:

char *str = (char*)malloc(100);
memset(str,0,100);
memcpy(str,"hello",strlen("hello"));
printf("strlen = %d\n",strlen(str)); //strlen = 4
printf("sizeof = %d\n",sizeof(str)); //sizeof = 4

2.在运用memcpy和strcpy两个上面,后者是在复制的过程中遇到'\0'后自动停止复制拷贝,而前者是有多大复制多大。

strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

3.wireshark抓取本地包

 
在进行通信开发的过程中,我们往往会把本机既作为客户端又作为服务器端来调试代码,使得本机自己和自己通信。但是wireshark此时是无法抓取到数据包的,需要通过简单的设置才可以。 
      具体方法如下: 
      ①:以管理员身份运行cmd 
      ②:route add 本机ip mask 255.255.255.255 网关ip 
      此时再利用wireshark进行抓包便可以抓到本机自己同自己的通信包   
在命令行提示下面输入: route add 192.168.10.10 mask 255.255.255.255 192.168.10.1 metric 1 就这么简单!其中192.168.10.10是自己的IP,192.168.10.1是自己的网关 

使用完后使用delete替换add将这个给删除掉,不然每次本机包都往外面兜一圈再回来费时间。

4.当你频繁读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)

5.C++中的c_str()的使用,这个函数主要针对的就是C++的string类型的字符串,具体使用方式如下:

语法: 

const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 
比如:最好不要这样:
char* c; 
string s="1234"; 
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:

char c[20]; 
string s="1234"; 
strcpy(c,s.c_str()); 
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作


再举个例子
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:

string s = "Hello World!";
printf("%s", s.c_str()); //输出 "Hello World!"

6.UDP可靠传输

可靠UDP传输从来都不是高效率可靠传输的代名词,影响传输效率的最重要因素在于,sendto函数,每次只能投递一个mtu长度的包,频繁的系统调用极大的影响了极限性能。

7.UDP丢包重传

针对UDP丢包重传一个解决方案:让接收端发送ACKknowledge包,发送方维护两个队列:已发送但未确认,已确认。
使用定时器来做,简单说就是在传包的时候把时间记住,接收端在接收到包以后回复给发送端,发送端收到确认包以后就把这个时间清0,;发送端在发送出数据以后定时查这个事件,如果这个时间大于某个值,就说明服务器没有收到包,这样就确定需要重传。

8.一般情况下:对于海量数据传输(例如文件传输)不应该使用UDP。因为这么做除了上一点要求的特性外,还要求把窗口式流量控制、拥塞避免和慢启动这些特性也加到应用程序中,意味着我们是在应用程序中再造TCP。我们应该让厂商来关注更好的TCP性能,而自己应该致力于提升应用程序本身。
这些规则存在例外,尤其是在现有的应用程序中。举例来说,TFTP就用UDP传送海量数据。TFTP选用UDP的原因在于,在系统自举引导代码中使用UDP比使用TCP易于实现,而且TFTP只用于在局域网上引导系统,而不是跨广域网传送海量数据。不过这样一来就要求TFTP自含用于确认的序列号字段,并具备超时和重传能力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值