Welcome 微信登录

首页 / 操作系统 / Linux

Java Web中的中文编码

Java Web中的中文编码

Java Web开发中经常会遇到中文编码问题,那么为什么需要编码呢?因为人类需要表示的符号太多,无法用1个字节来表示,而计算机中存储信息最小单元为1个字节。所以必须指定char与byte之间的编码规则了。1 常见的编码方式 计算机中提供了多种编码方式,常见的有ASCII、ISO-8859-1、GBK、GB2312、UTF-16、UTF-8等。ASCII 码学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控...
探索UDP套接字编程

探索UDP套接字编程

UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP、Telnet等,基于UDP有DNS、NFS、SNMP等。UDP是无连接,不可靠的数据协议服务,而TCP提供面向流、提供可靠数据服务。注意,UDP和TCP没有好坏之分,只是二者的适用场景不同罢了。 典型的UDP套接字编程模型是客户端不予服务端建立连接,而只是调用sendto函数来向服务端发送数据,其中必须要指定服务端的信息,包括IP和端口等;服务端不接...
UDP接收端缓冲区和丢包问题

UDP接收端缓冲区和丢包问题

实习项目需要用Winsock内核模式驱动提供的sockets方法,,这个驱动负责连接和缓冲管理,对应用程序提供socket风格的编程接口。大概的流程是发送端将一幅图像分成多个包进行发送,接收端接收包整合成图像并显示。通过测试发现,发送端是相机,采用udp协议,发送的图像数据包有3428个,并且通过wireshark抓取到全部的包,但是接收端只能接收到3000个包左右,出现了丢包现象。分析UDP丢包的原因:1)调用recvfrom方法接收到数据后,处理数据花...
va_start和va_end使用详解

va_start和va_end使用详解

在前一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理:1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种传参的形式,在后面我们就会用到它。2.函数参数的传递原理函...
Libevent初探

Libevent初探

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。 Libeve...
利用epoll写一个“迷你”的网络事件库

利用epoll写一个“迷你”的网络事件库

epoll是Linux下高性能的IO复用技术,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Trigger...
Libevent的IO复用技术和定时事件原理

Libevent的IO复用技术和定时事件原理

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。1 Libeve...
Java 8 Optional类介绍及其源码

Java 8 Optional类介绍及其源码

阅读目录什么是Optional对象使用Optional对象的好处源码及示例参考资料什么是Optional对象Java 8中所谓的Optional对象,即一个容器对象,该对象可以包含一个null或非null值。如果该值不为null,则调用isPresent()方法将返回true,且调用get()方法会返回该值。另外,该对象还有其它方法:如可以使用orElse()方法给Optional对象设定默认值(当值为null时,会使用默认值);使用ifPresent()...
<< 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 >>