并发服务器三种实现方式之进程、线程和select

前言:刚开始学网络编程,都会先写一个客户端和服务端,不知道你们有没有试一下:再打开一下客户端,是连不上服务端的。还有一个问题不知道你们发现没:有时启服务器,会提示“Address already in use”,过一会就好了,想过为啥么?在这篇博客会解释这个问题。 但现实的服务器都会连很多客户端的, ... »

用select函数实现多路IO转接

前言:周末学了两天网络编程,把之前的不懂一些问题基本掌握了,例如TCP状态转换图、close和shutdown函数的区别、select函数等,今天分享给大家。 一、网络编程基础知识 在写代码之前,需要简单介绍一下基础知识。 小端法(本地):低地址存低字节、高地址存高字节(简称高存高、低存低) 大端法 ... »

聊聊IOCP,聊聊异步编程

前言 IO完成端口(IO completion ports)在多核计算机的并行异步IO请求方面提供了一种高效的线程模型。当进程创建一个IO完成端口时,系统创建一个相关联的队列,其唯一目的是服务与那些请求。IO完成端口通常和预先分配的线程池配合,相比于一个一个创建线程,这使其更快更高效。IOCP在进程 ... »

java--网络编程

1、Java支持基于流的通信和基于包的通信 基于流的通信使用TCP协议(传输控制协议)进行数据传输,传输是无损可靠的 基于包的通信使用UDP协议(用户数据报协议)进行数据传输,不能保证传输没有丢失 2、服务端和客户端套接字--基于流的通信 客户端代码 如果服务端的端口服务没有起来,运行客户端的程序会 ... »

一起来读Netty In Action(一)

Netty是一款异步事件驱动的网络应用程序框架,支持快速的开发可维护的高性能的面向协议的服务器和客户端。在网络编程中,阻塞、非阻塞、同步、异步经常被提到。同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)I ... »

高性能网络IO模型

同步阻塞式IO开发简单,但在处理IO密集的并发任务时,非常浪费CPU资源,性能低;并且,当一个进程(线程)含有多个套接字上时,同步阻塞式IO会带来问题:因为同步阻塞式IO只支持进程(线程)阻塞在一个套接字上,其余套接字上的事件将得不到及时处理。 为解决这些问题,IO编程的世界诞生了更多的IO模型及实 ... »

三十天学不会TCP,UDP/IP网络编程 -- RTT的计算

欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)看到完整版。 如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,虽然说现在这种“看不见”的东西真正能在实用中遇到的机会不多,但是我始终觉得无论计算机的语言,热点方向怎么变化,作为一个程序员, ... »

三十天学不会TCP,UDP/IP网络编程 -- TCP中的智慧之连续ARQ

突然发现上一篇文章贴图有问题,关键我怎么调也调不好,为了表达歉意,我再贴一篇gitbook上的吧,虽然违背了我自己的隔一篇在这里发一次的潜规则~其余完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到。 如果对和程序员有关的计算机网络知识,和对计算机 ... »

三十天学不会TCP,UDP/IP网络编程 - RST的用法

不知不觉也写了这么多了,继续我的自己的推广大业~完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到。 如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,虽然说现在这种“看不见”的东西真正能在实用中遇到的机会不多,但是我始终觉得无论 ... »

三十天学不会TCP,UDP/IP网络编程 - 绅士的开始

经过了过年的忙碌和年初的懈怠一切的日子,我又开始重新更新了~这是最新的一篇~完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到。 如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,虽然说现在这种“看不见”的东西真正能在实用中遇到的 ... »

三十天学不会TCP,UDP/IP网络编程 - UDP的实践--DHCP

在经历了一顿忙碌加出去玩了玩之后,我又开始重新更新了~这是最新的一篇~完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到,在gitbook的后台流量上看到了有很多盆友都看了我目前写的这么多文字,说实话,真心是有点感动,也有很多的成就感。正是这种感动 ... »

10 - JavaSE之网络编程

网络编程 网络通信协议分层思想 为什么要分层呢?因为整个网络协议非常复杂,要涉及到方方面面的知识,而且还有对底层硬件的操作,利用分层的思想,我们可以将复杂的通信协议分割成一层层的形式,上一层可以调用下一层,而与再下一层不发生关系,各层之间互不影响,便于系统的开发。我们把用户程序作为最高层,把物理通信 ... »

三十天学不会TCP,UDP/IP网络编程-TraceRoute的哲学

新年快乐,继续来部分粘贴复制我的这一系列文章啦,如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)star我的这一系列文章,虽然说现在这种“看不见”的东西真正能在实用中遇到的机会不多,但是我 ... »

三十天学不会TCP,UDP/IP网络编程-ARP -- 连接MAC和IP

继续来做(da)推(guang)介(gao)我自己的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,目前已完成了九篇啦。后面会在gitbook上不断更新,欢迎大家star,主要是在写完之前欢迎各位给出指正的意见 ... »

TCP程序中发送和接收数据

这里我们来探讨一下在网络编程过程中,有关read/write 或者send/recv的使用细节。这里有关常用的阻塞/非阻塞的解释在网上有很多很好的例子,这里就不说了,还有errno ==EAGAIN 异常等等。首先我们拿一个简单的实例代码看一下。 read/write面临的是什么问题: 字节流套接字 ... »

三十天学不会TCP,UDP/IP网络编程-IP头格式祥述

我又来了,这篇文章还是来做(da)推(guang)介(gao)我自己的!俗话说事不过三,我觉得我下次得换个说法了,不然估计要被厌恶了,但是我是好心呐,一定要相信我纯洁的眼神。由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前 ... »

netty使用从0到1

本周强总在组内做了netty分享,内容相当不错,趁着这次分享记录的,以及以前研究,进行一下记录。 java io形式存在三种,一种是BIO传统IO是阻塞IO,面向字符、字节服务都属于这一种。NIO官方意思是新 IO框架,相比原有java io框架,大家更倾向于把NIO理解为无阻塞IO,性能有着极大优 ... »

如何编写一个稳定的网络程序(TCP)

本节我们看一下怎样才能编写一个基于TCP稳定的客户端或者服务器程序,主要以试验抓包的方式观察数据包的变化,对网络中出现的多种情况进行分析,分析网络程序中常用的技术及它们出现的原因,在之后的编程中能早一点意识到这些潜在问题。实例代码如下: client.c 和server.c 因在试验过程中代码有所改 ... »

Linux 编程--三种常用的定时器

这节我们来探讨一下linux开发过程中常用的定时器,尤其在网络编程中被常常用到如heartbeat,断线重连等等。这里提供了三种定时器的方案,分别是链表形式的计时器,环型计时器,最小堆计时器。每个都有不同的作用和优势,可以结合实际项目选择或者改良。 链表计时器: 链表计时器是一个实现很简单的一种计时 ... »

三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层

这篇文章主要是来做(da)推(guang)介(gao)的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,后面会不断更新,主要是在写完之前欢迎各位给出指正的意见。最最重要的,地址在这里:https://www.g ... »